Для циклической печати 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, чтобы увидеть объект анализа