[英]Android Iterating JSON Array containing JSON Object
所以我有這段代碼,它基本上從JSON數組(包含幾個對象)中獲取一個值,並適當地分配它。
// RETRIEVE CAST LIST
JSONArray jCastArr = jObj.getJSONArray("abridged_cast");
Cast person = new Cast();
ArrayList<Cast> castList= new ArrayList<Cast>();
for (int i=0; i < jCastArr.length(); i++) {
JSONObject jpersonObj = jCastArr.getJSONObject(i);
person.castId = (String) jpersonObj.getString("id");
person.castFullName = (String) jpersonObj.getString("name");
castList.add(person);
}
details.castList = castList;
JSON值(爛番茄)
{
"id": 771267761,
"title": "Riddick",
"year": 2013,
"genres": [
"Action & Adventure",
"Science Fiction & Fantasy"
],
"mpaa_rating": "R",
"runtime": 119,
"critics_consensus": "It may not win the franchise many new converts, but this back-to-basics outing brings Riddick fans more of the brooding sci-fi action they've come to expect.",
"release_dates": {
"theater": "2013-09-06"
},
"ratings": {
"critics_rating": "Rotten",
"critics_score": 57,
"audience_rating": "Upright",
"audience_score": 66
},
"synopsis": "Blah.....",
"posters": {
"thumbnail": "http://content8.flixster.com/movie/11/17/20/11172082_mob.jpg",
"profile": "http://content8.flixster.com/movie/11/17/20/11172082_pro.jpg",
"detailed": "http://content8.flixster.com/movie/11/17/20/11172082_det.jpg",
"original": "http://content8.flixster.com/movie/11/17/20/11172082_ori.jpg"
},
"abridged_cast": [
{
"name": "Vin Diesel",
"id": "162652472",
"characters": [
"Riddick"
]
},
{
"name": "Karl Urban",
"id": "162654704",
"characters": [
"Vaako"
]
},
{
"name": "Jordi Molla",
"id": "364617086",
"characters": [
"Santana"
]
},
{
"name": "Matt Nable",
"id": "771069067",
"characters": [
"Boss Johns"
]
},
{
"name": "Katee Sackhoff",
"id": "459518520",
"characters": [
"Dahl"
]
}
],
"abridged_directors": [
{
"name": "David Twohy"
}
],
"studio": "Universal Classics",
"alternate_ids": {
"imdb": "1411250"
},
"links": {
"self": "http://api.rottentomatoes.com/api/public/v1.0/movies/771267761.json",
"alternate": "http://www.rottentomatoes.com/m/riddick/",
"cast": "http://api.rottentomatoes.com/api/public/v1.0/movies/771267761/cast.json",
"clips": "http://api.rottentomatoes.com/api/public/v1.0/movies/771267761/clips.json",
"reviews": "http://api.rottentomatoes.com/api/public/v1.0/movies/771267761/reviews.json",
"similar": "http://api.rottentomatoes.com/api/public/v1.0/movies/771267761/similar.json"
}
}
問題是當我這樣稱呼它時
ArrayList<Cast> list = details.castList;
Cast actor = list.get(0);
String temp = actor.castFullName;
longToast(temp);
它將始終返回Katee Sackhoff(無論它處於什么索引位置)。 我嘗試使用for循環對其進行迭代,但我只想使其簡單以用於調試。
每個條目都使用相同的Cast對象。
在每次迭代中,您只更改了一個對象,而是創建了一個新對象。
這段代碼應該解決它:
JSONArray jCastArr = jObj.getJSONArray("abridged_cast");
ArrayList<Cast> castList= new ArrayList<Cast>();
for (int i=0; i < jCastArr.length(); i++) {
Cast person = new Cast(); // create a new object here
JSONObject jpersonObj = jCastArr.getJSONObject(i);
person.castId = (String) jpersonObj.getString("id");
person.castFullName = (String) jpersonObj.getString("name");
castList.add(person);
}
details.castList = castList;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.