Я создаю приложение для Android, которое необходимо загрузить и синхронизировать с онлайн-базой данных. Я отправляю свой запрос из приложения на страницу php, которая возвращает соответствующие строки из базы данных в формате JSON.
Может кто-нибудь, пожалуйста, скажите мне лучший способ перебрать массив JSON?
Я получаю массив объектов:
[{json object},{json object},{json object}]
Какой самый простой фрагмент кода я мог бы использовать для доступа к JSONObjects в массиве?
РЕДАКТИРОВАТЬ: теперь, когда я думаю об этом, метод, который я использовал для итерации цикла был:
for (String row: json){
id = row.getInt("id");
name = row.getString("name");
password = row.getString("password");
}
Так что я думаю, что смог каким-то образом превратить возвращаемый Json в итеративный массив. Есть идеи, как мне этого добиться?
Я извиняюсь за свою неопределенность, но у меня это сработало на примере, который я нашел в Интернете, и с тех пор не смог его найти.
Ответы:
Я сделал это двумя разными способами,
1.) сделать карту
2.) сделать JSONArray из имен
источник
Я думаю, что этот код короткий и понятный:
Это то, что вы искали?
источник
К сожалению,
JSONArray
не поддерживаетforeach
заявления, такие как:источник
Когда я попробовал предложение @ vipw, я столкнулся с этим исключением:
The method getJSONObject(int) is undefined for the type JSONArray
Это сработало для меня вместо:
источник
Если вы используете реализацию JSON.org Java с открытым исходным кодом, вы можете просто заставить JSONArray реализовать
Iterable
интерфейс и добавить следующий метод в класс:Это сделает все экземпляры JSONArray итеративными, что означает, что
for (Object foo : bar)
синтаксис теперь будет работать с ним (обратите внимание, что foo должен быть объектом, потому что у JSONArrays нет объявленного типа). Все это работает, потому что класс JSONArray поддерживается простым ArrayList, который уже повторяется. Я полагаю, что другие реализации с открытым исходным кодом было бы так же легко изменить.источник
В массивах ищите:
источник
Вы используете один и тот же объект Cast для каждой записи. На каждой итерации вы просто меняли один и тот же объект, вместо этого создавая новый.
Этот код должен это исправить:
источник
Итерируя по массиву JSON (org.json.JSONArray, встроенный в Android), следите за нулевыми объектами; например, вы можете получить
"null"
вместо нуля строки.Чек может выглядеть так:
источник