0

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.

1 Answer 1

6

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;
Sign up to request clarification or add additional context in comments.

1 Comment

Aww.. snap.. i guess i over looked it. Thanks for the hint. Really appreciate it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.