Для циклической печати String только один раз, когда условие равно 25

Я пытаюсь распечатать объект в JSON используя Facebook Graph API.

Вот мой код:

try{
    JSONArray data = innerJson.getJSONArray("data");
    Log.d("innerDataLength", String.valueOf(data.length()));

    for (int i = 0; i<data.length(); i++) {
        String message = data.getJSONObject(i).getString("message");
        Log.d("message", message);
    }
} catch (JSONException e) {
    Log.d("exception", e.getMessage());
}

Вот вывод:

D/innerDataLength: 25
D/message: "blah blah blah"
D/exception: No value for message

Как вы можете видеть condition т.е. data.length() тогда 25 почему я распечатываю сообщение только один раз?

2 ответа

Решение

Обратите внимание, что вы получаете исключение:

D / исключение: нет значения для сообщения

Это указывает на то, что второй объект в JSONArray не имеет message имущество. Похоже, это необязательно, поэтому вам нужно проверить, message свойство существует первым.

Обновить:

try{
    JSONArray data = innerJson.getJSONArray("data");
    Log.d("innerDataLength", String.valueOf(data.length()));

    for (int i = 0; i < data.length(); i++) {
        JSONObject obj = data.getJSONObject(i);
        if (obj.has("message")) {
            String message = obj.getString("message");
            Log.d("message", message);
        }
        if (obj.has("story")) {
            String story= obj.getString("story");
            Log.d("story", story);
        }
    }
} catch (JSONException e) {
    Log.d("exception", e.getMessage());
}

Некоторые объекты в массиве innerJson.getJSONArray("data") не имеют сообщения

чтобы проверить, что я говорю, прокомментируйте строку внутри цикла и просто напечатайте, я получу от 0 до 24

чтобы избежать того, чтобы окружить статус сообщения синтаксического анализа с try и catch, чтобы избежать анализа объекта, который не содержит сообщения

Вы также можете распечатать data.getJSONObject(i).toString, чтобы увидеть объект анализа

Другие вопросы по тегам