Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Android Android Lists and Adapters (2015) Updating the Data Model Using JSONArray

What am I doing wrong?

The compiler is telling me to loop "i" three times. I thought I was doing so. Otherwise, I don't know what is wrong.

How do I fix my code?

CodeChallenge.java
// JSONObject 'jsonData' was loaded from data.json

JSONArray data = jsonData.getJSONArray("data");

for (int i = 0; i < data.length(); i++) {
  JSONObject jsonTitle = data.getJSONObject(i);

  Log.i("CodeChallenge", jsonData.getString("title"));
};
data.json
{
    "name":"Netflix Playlist",
    "shows":[
        {
            "title":"Doctor Who",
            "season":8,
            "episode":3
        },
        {
            "title":"Arrow",
            "season":1,
            "episode":10
        },
        {
            "title":"Portlandia",
            "season":4,
            "episode":5
        }
    ]
}

1 Answer

Hello ammonquackenbush ,

First things first - I'm not sure how you passed step 1 when your JSONArray is not named as it should be, but let's forget that.

Second - there is no ; after the end of the for scope. That's why you get your error.

Finally - You're about to encounter a different error because you're not printing what is required. In your case, inside the for loop you create a JSONObject named jsonTitle. As the for loops it will be changed from one show to another. Therefore if you want to get the title of the show, you should use it (jsonTitle) for it is a object, whereas the one you use (data) is an array of shows.

You code should look like this:

JSONArray jsonShows = jsonData.getJSONArray("shows");

for (int i = 0; i < jsonShows.length(); i++) {
  JSONObject jsonTitle = jsonShows.getJSONObject(i); // would be better if you call the object "show" since it's not just a title
  Log.i("CodeChallenge", jsonTitle.getString("title"));
}

Thanks.