Почему я не могу создать объект JSON?

#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