#android #json #object #http-get
#Android #json #объект #http-get
Вопрос:
Я использую HTTP Get для извлечения строки в формате JSON со своего веб-сайта.
Однако, когда я пытаюсь создать JSONObject, ничего не происходит. Объект не создан, и я не могу получить доступ к массивам или чему-либо внутри него.
Я проверил, что мое приложение действительно получает правильную строку, и она правильно отформатирована как JSON.
Должен ли я объявлять его каким-то определенным образом или иметь отдельные блоки try / catch …?
Я нахожусь в тупике с этим, поэтому буду признателен за любую помощь…
Ниже у вас есть весь код, который я написал в этом выпуске, и хотя это немного, я застрял и не знаю, куда с этим идти…
public String result, testString;
public TextView resultText;
public String url = "http://www.ace.ucv.ro/android/android.php";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainmenu);
resultText = (TextView) findViewById(R.id.result);
try {
HttpGet httpGet = new HttpGet(url);
result = EntityUtils.toString(new DefaultHttpClient().execute(httpGet).getEntity());
JSONObject jsonObject = new JSONObject(result);
} catch (ParseException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
resultText.setText(result);
}
Комментарии:
1. ваш код выглядит правильно, как вы проверяете, заполнен ли JSONObject?
2. Прежде всего, никакие операции, выполняемые после этого с JSONObject, не работают, например, получение массивов или значений и т.д. Во-вторых, никакая инструкция, написанная в этом блоке try / catch ПОСЛЕ создания объекта, не выполняется. (протестировано с помощью чего-то простого, например result = «test»;
3. Похоже, вы печатаете трассировку стека… не могли бы вы поделиться им?
Ответ №1:
URL, который у вас есть в коде (http://www.ace.ucv.ro/android/android.php ) не возвращает объект Json, вместо этого это JSONArray.
Просто замените JSONObject на JSONArray, и все будет в порядке.
Комментарии:
1. Спасибо lot…it работает. Однако мне все еще нужно извлечь и сохранить их в массив для каждого «заголовка», «описания» и так далее. Есть ли какой-либо шанс сделать это или было бы проще изменить скрипт .php? (видя, что я больше не могу использовать метод getJSONArray(«title»);)
Ответ №2:
Вы уверены, что строка, сохраненная в результате, является просто JSONObject или это JSONArray?
Я помню, как наткнулся на похожую проблему.
Комментарии:
1. Результат строки должен хранить только данные JSON, которые я получаю с соответствующего URL… Я извиняюсь, я совсем новичок, и это немного не в моей лиге, но я делаю все возможное, чтобы учиться.
2. То, что «должно произойти», не обязательно совпадает с тем, что «происходит». И похоже, что Питер выше подтверждает мои подозрения. И именно поэтому здорово иметь множество возможностей stackoverflow.
Ответ №3:
На первый взгляд, ваш код выглядит знакомым / разумным. Но, возможно, вам следует разархивировать его и записать промежуточные результаты, что поможет вам увидеть, на каком этапе происходит ошибка. Например…
HttpGet httpGet = new HttpGet(url);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(httpGet);
Log.v("test", "HTTP response = " response);
HttpEntity entity = response.getEntity();
Log.v("test", "HTTP entity = " entity);
String content = EntityUtils.toString(entity);
Log.v("test", "HTTP content = " content);
JSONObject mJsonObj = new JSONObject(mContent);
Комментарии:
1. Я уже знаю, что все работает нормально, пока не перейду к созданию JSONObject со строковым результатом. Строка правильно получена приложением, и это допустимый JSON