2016-02-26 2 views
0

Я использую следующий код для анализа массива json, который находится внутри объекта json.индекс ошибки вне диапазона при анализе json array

JSONObject notificationResponse = new JSONObject(response.toString()); 
JSONObject value = new JSONObject(notificationResponse.getString("value")); 
JSONArray details = value.optJSONArray("details"); 
final int numberOfItems = details.length(); 

for (int i =0; i <= numberOfItems; i++){ 
JSONObject jsonObjects = details.getJSONObject(i); 
String text = jsonObjects.getString("text"); 
String date = jsonObjects.getString("date & time"); 
Log.d(TAG,text + " " +date); 
    } 

} catch (Exception e) { 
     e.printStackTrace(); 
    } 

Это мой json.

{"status":1,"value":{"details":[{"text":"sample", "date & time":"12-NOV-15 3:30pm"}]}} 

Мой код out of range исключение в JSONObject jsonObjects = details.getJSONObject(i);

+1

просто заменить forloop <= состояние с <только – Manifest

+1

удалить знак равенства i

ответ

1

попробовать используя следующие документы:

for (int i =0; i < numberOfItems; i++){ 
JSONObject jsonObjects = details.getJSONObject(i); 
String text = jsonObjects.getString("text"); 
String date = jsonObjects.getString("date & time"); 
Log.d(TAG,text + " " +date); 
} 
1

Использование

for (int i =0; i < numberOfItems; i++) 
{ 
JSONObject jsonObjects = details.getJSONObject(i); 
String text = jsonObjects.getString("text"); 
String date = jsonObjects.getString("date & time"); 
Log.d(TAG,text + " " +date); 
} 

вместо

for (int i =0; i <= numberOfItems; i++) 
    { 
    JSONObject jsonObjects = details.getJSONObject(i); 
    String text = jsonObjects.getString("text"); 
    String date = jsonObjects.getString("date & time"); 
    Log.d(TAG,text + " " +date); 
    } 
1

Пожалуйста, попробуйте этот использовать i < numberOfItems; вместо i <= numberOfItems;

JSONObject notificationResponse = new JSONObject(response.toString()); 
JSONObject value = new JSONObject(notificationResponse.getString("value")); 
JSONArray details = value.optJSONArray("details"); 
final int numberOfItems = details.length(); 

for (int i =0; i < numberOfItems; i++){ 
JSONObject jsonObjects = details.getJSONObject(i); 
String text = jsonObjects.getString("text"); 
String date = jsonObjects.getString("date & time"); 
Log.d(TAG,text + " " +date); 
    } 

} catch (Exception e) { 
     e.printStackTrace(); 
    } 

Надеется, что это помогает вам

1

удалить = от вашего для петли

for (int i =0; i < numberOfItems; i++) 

JsonArray индекса начинается с 0, поэтому length() будет возвращать (общего размер-1)

1

Поскольку вы инициируя петлю, как я = 0, таким образом, условие должно быть изменено, как показано ниже:

for (int i =0; i < numberOfItems; i++){ 
} 

вместо

for (int i =0; i <= numberOfItems; i++){ 
}