Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

So i have this code which basically takes a value from JSON array (containing several objects) and assign it appropriately.

// 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;

The JSON value (rotten tomatoes)

{
    "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"
    }
}

The problem is when i call it like such

ArrayList<Cast> list = details.castList;
Cast actor = list.get(0);
String temp = actor.castFullName;
longToast(temp);

It will always return Katee Sackhoff (no matter what index position it is). I've tried to iterate it using for loops, but i just want to keep it simple for debugging purposes.

share|improve this question
add comment

1 Answer

up vote 2 down vote accepted

You are using the same Cast object for every entry.
On each iteration you just changed the same object instead creating a new one.

This code should fix it:

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;
share|improve this answer
 
Aww.. snap.. i guess i over looked it. Thanks for the hint. Really appreciate it. –  username55 Sep 12 '13 at 3:45
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.