所以我有这个代码,它基本上从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循环迭代它,但我只想保持它的简单以便进行调试。
答案 0 :(得分:6)
您为每个条目使用相同的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;