Buduję aplikację na Androida, która musi pobrać i zsynchronizować się z bazą danych online. Wysyłam zapytanie z aplikacji do strony php, która zwraca odpowiednie wiersze z bazy danych w formacie JSON.
czy ktoś może mi powiedzieć, jak najlepiej wykonać iterację przez tablicę JSON?
Otrzymuję tablicę obiektów:
[{json object},{json object},{json object}]
Jaki jest najprostszy fragment kodu, którego mogę użyć, aby uzyskać dostęp do obiektów JSONObject w tablicy?
EDYCJA: teraz, gdy o tym myślę, metoda, której użyłem do iteracji pętli, była:
for (String row: json){
id = row.getInt("id");
name = row.getString("name");
password = row.getString("password");
}
Więc wydaje mi się, że udało mi się w jakiś sposób zamienić zwrócone Json na tablicę iterowalną. Jakieś pomysły, jak mogę to osiągnąć?
Przepraszam za moją włóczęgę, ale działało to z przykładu, który znalazłem w Internecie i od tego czasu nie mogę go znaleźć.
Odpowiedzi:
Zrobiłem to na dwa różne sposoby,
1.) Zrób mapę
2.) zrób tablicę nazw w JSONA
źródło
Myślę, że ten kod jest krótki i jasny:
Czy tego szukałeś?
źródło
Niestety
JSONArray
nie obsługujeforeach
stwierdzeń, takich jak:źródło
Kiedy wypróbowałem sugestię @ vipw, stanąłem przed tym wyjątkiem:
The method getJSONObject(int) is undefined for the type JSONArray
Zamiast tego zadziałało dla mnie:
źródło
Jeśli używasz implementacji JSON.org Java , która jest open source, możesz po prostu sprawić, by JSONArray zaimplementował
Iterable
interfejs i dodać następującą metodę do klasy:Spowoduje to, że wszystkie instancje JSONArray będą iterowalne, co oznacza, że
for (Object foo : bar)
składnia będzie teraz z nim działać (zauważ, że foo musi być obiektem, ponieważ JSONArray nie ma zadeklarowanego typu). Wszystko to działa, ponieważ klasa JSONArray jest obsługiwana przez prostą ArrayList, która jest już iterowalna. Wyobrażam sobie, że inne implementacje open source byłyby równie łatwe do zmiany.źródło
W tablicach poszukaj:
źródło
Używasz tego samego obiektu Cast dla każdego wpisu. W każdej iteracji po prostu zmieniłeś ten sam obiekt, zamiast tworzyć nowy.
Ten kod powinien to naprawić:
źródło
Podczas iteracji po tablicy JSON (org.json.JSONArray, wbudowana w system Android), uważaj na obiekty puste ; na przykład możesz otrzymać
"null"
zamiast łańcucha pustego .Czek może wyglądać następująco:
źródło