Mark F
Mark F

Reputation: 1543

Retrieving Data with JSON in Android

My application connects to the web and retrieves a JSON file. I am having some issues retrieving the data that I need from this file. Here is the link to the JSON file: http://api.wunderground.com/api/f9d9bc3cc3834375/forecast/q/CA/San_Francisco.json

Here is a snippet of what it looks like: enter image description here

I would like to get the value of the "period" variable in the first JSon object within the "forecastday" array, which should be 0. Here is how i'm looking at this. "forecastday" is the array, within that there are a number of JSon objects, each containing variables like "period","icon"....."pop".

In my code, I attempt to get the JSON array "forecastday" and then get the first Json object of the array, I then retrieve the value of "period" in that object and set it in a TextView:

        protected void onPostExecute(String response) {
        if(response == null) {
            response = "THERE WAS AN ERROR";
        }
        progressBar.setVisibility(View.GONE);


        try {

            JSONObject jsonObj = new JSONObject(response);

            JSONArray contacts = jsonObj.getJSONArray("forecastday");

            JSONObject c = contacts.getJSONObject(0);

            String period = c.getString("period");

            responseView.setText(period);

        } catch (JSONException e) {
            e.printStackTrace();
     }
    }

When I run the code, nothing is being retrieved. I'm new to working with JSon and am wondering if I'm looking at this wrong. Please help.

Upvotes: 0

Views: 86

Answers (4)

Kostas Drak
Kostas Drak

Reputation: 3260

This code works for me fine:

JSONObject jsonResponse = new JSONObject(responce);
JSONArray jsonMainNode = jsonResponse.optJSONArray("forecastday");
for (int i = 0; i < jsonMainNode.length(); i++) {
     JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
     String period = jsonChildNode.optString("period");
     responceView.setText(period);
}

Upvotes: 0

Shishupal Shakya
Shishupal Shakya

Reputation: 1672

Try this code :

    try {
    JSONObject jsonObj = new JSONObject(response);
    JSONObject forecastObj = jsonObj.getJSONObject("forecast");
    JSONObject txt_forecastObj = forecastObj.getJSONObject("txt_forecast");
    JSONArray foracastdayArray = txt_forecastObj.getJSONArray("foracastday");

    JSONObject oOjb0 = foracastdayArray.getJSONObject(0);
    String period = oOjb0.getString("perioed");

}catch (Exception e){

}

Upvotes: 1

Bubu
Bubu

Reputation: 1543

Your "forecastday" JSONArray is inside the "txt_forecast" JSONObject that is inside the "forecast" JSONObject of your response, so you have to extract your JSONArray from this JSONObject and not from the root JSON response :

try {
    JSONObject jsonObj = new JSONObject(response);
--> JSONObject forecatsObj = jsonObj.getJSONObject("forecast");
--> JSONObject txtForecatsObj = forecatsObj.getJSONObject("txt_forecast");
    JSONArray contacts = txtForecatsObj.getJSONArray("forecastday");
    ...

Upvotes: 3

meda
meda

Reputation: 45490

You were close but it is incorrect, try like this:

JSONObject jsonObj = new JSONObject(response);
JSONObject forecast = jsonObj.getJSONObject("forecast");
JSONObject txtForecast = forecast.getJSONObject("txt_forecast");
JSONArray forecastDay = txtForecast.getJSONArray("forecastday");

//parse the first period value
String period = forecastDay.getJSONObject(0).getString("period");

responseView.setText(period);

Upvotes: 2

Related Questions