0

I am pretty new to Android.I am trying to parse a JSON url. But I am getting following error "Json parsing error: No value for unofficial-summary". Here is the response that I am getting.

Response from url: {"success":true,"data":{"summary":{"total":15616130,"confirmedCasesIndian":15616082,"confirmedCasesForeign":48,"discharged":13276039,"deaths":182553,"confirmedButLocationUnidentified":0},"unofficial-summary":[{"source":"covid19india.org","total":7945975,"recovered":7198877,"deaths":119538,"active":626192}],"regional":[{"loc":"Andaman and Nicobar Islands","confirmedCasesIndian":5466,"confirmedCasesForeign":0,"discharged":5243,"deaths":64,"totalConfirmed":5466},{"loc":"Andhra Pradesh","confirmedCasesIndian":976987,"confirmedCasesForeign":0,"discharged":915626,"deaths":7472,"totalConfirmed":976987},{"loc":"Arunachal Pradesh","confirmedCasesIndian":17113,"confirmedCasesForeign":0,"discharged":16835,"deaths":56,"totalConfirmed":17113},{"loc":"Assam","confirmedCasesIndian":227473,"confirmedCasesForeign":0,"discharged":217296,"deaths":1145,"totalConfirmed":227473},{"loc":"Bihar","confirmedCasesIndian":342059,"confirmedCasesForeign":0,"discharged":283863,"deaths":1841,"totalConfirmed":342059},{"loc":"Chandigarh","confirmedCasesIndian":35148,"confirmedCasesForeign":0,"discharged":30768,"deaths":421,"totalConfirmed":35148},{"loc":"Chhattisgarh","confirmedCasesIndian":574299,"confirmedCasesForeign":0,"discharged":442337,"deaths":6274,"totalConfirmed":574299},{"loc":"Dadra and Nagar Haveli and Daman and Diu","confirmedCasesIndian":5422,"confirmedCasesForeign":0,"discharged":4047,"deaths":4,"totalConfirmed":5422},{"loc":"Delhi","confirmedCasesIndian":905540,"confirmedCasesForeign":1,"discharged":807328,"deaths":12638,"totalConfirmed":905541},{"loc":"Goa","confirmedCasesIndian":69311,"confirmedCasesForeign":1,"discharged":60145,"deaths":926,"totalConfirmed":69312},{"loc":"Gujarat","confirmedCasesIndian":428177,"confirmedCasesForeign":1,"discharged":346063,"deaths":5615,"totalConfirmed":428178},{"loc":"Haryana","confirmedCasesIndian":371610,"confirmedCasesForeign":14,"discharged":318369,"deaths":3483,"totalConfirmed":371624},{"loc":"Himachal Pradesh","confirmedCasesIndian":79410,"confirmedCasesForeign":0,"discharged":68164,"deaths":1219,"totalConfirmed":79410},{"loc":"Jammu and Kashmir","confirmedCasesIndian":150238,"confirmedCasesForeign":0,"discharged":134697,"deaths":2071,"totalConfirmed":150238},{"loc":"Jharkhand","confirmedCasesIndian":172315,"confirmedCasesForeign":0,"discharged":137590,"deaths":1547,"totalConfirmed":172315},{"loc":"Karnataka","confirmedCasesIndian":1198644,"confirmedCasesForeign":0,"discharged":1025821,"deaths":13646,"totalConfirmed":1198644},{"loc":"Kerala","confirmedCasesIndian":1272637,"confirmedCasesForeign":8,"discharged":1148671,"deaths":4978,"totalConfirmed":1272645},{"loc":"Ladakh","confirmedCasesIndian":12556,"confirmedCasesForeign":0,"discharged":10610,"deaths":134,"totalConfirmed":12556},{"loc":"Lakshadweep","confirmedCasesIndian":1335,"confirmedCasesForeign":0,"discharged":817,"deaths":1,"totalConfirmed":1335},{"loc":"Madhya Pradesh","confirmedCasesIndian":433704,"confirmedCasesForeign":0,"discharged":350720,"deaths":4713,"totalConfirmed":433704},{"loc":"Maharashtra","confirmedCasesIndian":3960356,"confirmedCasesForeign":3,"discharged":3213464,"deaths":61343,"totalConfirmed":3960359},{"loc":"Manipur","confirmedCasesIndian":29869,"confirmedCasesForeign":0,"discharged":29106,"deaths":378,"totalConfirmed":29869},{"loc":"Meghalaya","confirmedCasesIndian":15116,"confirmedCasesForeign":0,"discharged":14105,"deaths":154,"totalConfirmed":15116},{"loc":"Mizoram","confirmedCasesIndian":5085,"confirmedCasesForeign":0,"discharged":4569,"deaths":12,"totalConfirmed":5085},{"loc":"Nagaland","confirmedCasesIndian":12650,"confirmedCasesForeign":0,"discharged":12299,"deaths":94,"totalConfirmed":12650},{"loc":"Odisha","confirmedCasesIndian":377464,"confirmedCasesForeign":0,"discharged":349377,"deaths":1953,"totalConfirmed":377464},{"loc":"Puducherry","confirmedCasesIndian":48974,"confirmedCasesForeign":0,"discharged":43184,"deaths":717,"totalConfirmed":48974},{"loc":"Punjab","confirmedCasesIndian":309316,"confirmedCasesForeign":0,"discharged":264562,"deaths":8045,"t

What am I doing wrong?

package com.sudarshan.jsonparse2;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

    private String TAG = MainActivity.class.getSimpleName();
    private ListView lv;

    ArrayList<HashMap<String, String>> contactList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        contactList = new ArrayList<>();
        lv = (ListView) findViewById(R.id.list);

        new GetContacts().execute();
    }

    private class GetContacts extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Toast.makeText(MainActivity.this,"Json Data is downloading",Toast.LENGTH_LONG).show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            HttpHandler sh = new HttpHandler();
            // Making a request to url and getting response
            String url = "https://api.rootnet.in/covid19-in/stats/latest";
            String jsonStr = sh.makeServiceCall(url);

            Log.e(TAG, "Response from url: " + jsonStr);
            if (jsonStr != null) {
                try {
                    JSONObject jsonObj = new JSONObject(jsonStr);

                    // Getting JSON Array node
                    JSONObject c  = jsonObj.getJSONArray("unofficial-summary").getJSONObject(0);
                    String source = c.getString("source");
                        int total = c.getInt("total");
                        int recovered = c.getInt("recovered");
                        int deaths = c.getInt("deaths");
                        int active = c.getInt("active");


                        // tmp hash map for single contact
                        HashMap<String, String> summary = new HashMap<>();

                        // adding each child node to HashMap key => value
                        summary.put("source", "source: "+source);
                        summary.put("total", "total:" +String.valueOf(total));
                        summary.put("recovered", "recovered" +String.valueOf(recovered));
                        summary.put("deaths", "deaths" + String.valueOf(deaths));
                        summary.put("active", "active" + String.valueOf(active));

                        // adding contact to contact list
                        contactList.add(summary);

                } catch (final JSONException e) {
                    Log.e(TAG, "Json parsing error: " + e.getMessage());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(),
                                    "Json parsing error: " + e.getMessage(),
                                    Toast.LENGTH_LONG).show();
                        }
                    });

                }

            } else {
                Log.e(TAG, "Couldn't get json from server.");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Couldn't get json from server. Check LogCat for possible errors!",
                                Toast.LENGTH_LONG).show();
                    }
                });
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            ListAdapter adapter = new SimpleAdapter(MainActivity.this, contactList,
                    R.layout.list_item, new String[]{ "source","total","recovered","deaths","active"},
                    new int[]{R.id.source, R.id.total,R.id.recovered,R.id.deaths,R.id.active});
            lv.setAdapter(adapter);
        }
    }
}
2
  • I would suggest you to use gson library for json deserialization/serialization - github.com/google/gson Commented Apr 25, 2021 at 19:03
  • But i dont wantbto convert json to java object and vice versa. I want to parse json and extract information Commented Apr 26, 2021 at 2:18

1 Answer 1

1

Json is like

{
"success": true,
"data": {
    "summary": {
        //...
    },
    "unofficial-summary": [
    {
        //...
    }]
    }
}

Shoud get data first:

@Override
protected Void doInBackground(Void... arg0) {
    HttpHandler sh = new HttpHandler();
    // Making a request to url and getting response
    String url = "https://api.rootnet.in/covid19-in/stats/latest";
    String jsonStr = sh.makeServiceCall(url);
    Log.e(TAG, "Response from url: " + jsonStr);
    if (jsonStr != null) {
        try {
            // Add: 2021/4/26 add get data first 
            JSONObject jsonObj = new JSONObject(jsonStr);
            String data = jsonObj.getString("data");
            Log.w(TAG, "doInBackground: " + data);
            // Getting JSON Array node
            JSONObject c = new JSONObject(data).getJSONArray("unofficial-summary").getJSONObject(0);
            String source = c.getString("source");
            int total = c.getInt("total");
            int recovered = c.getInt("recovered");
            int deaths = c.getInt("deaths");
            int active = c.getInt("active");
            // tmp hash map for single contact
            HashMap<String, String> summary = new HashMap<>();
            // adding each child node to HashMap key => value
            summary.put("source", "source: " + source);
            summary.put("total", "total:" + String.valueOf(total));
            summary.put("recovered", "recovered" + String.valueOf(recovered));
            summary.put("deaths", "deaths" + String.valueOf(deaths));
            summary.put("active", "active" + String.valueOf(active));
            // adding contact to contact list
            contactList.add(summary);
        } catch (final JSONException e) {
           //...
        }
    } else {
       //...
    }
    return null;
}
Sign up to request clarification or add additional context in comments.

2 Comments

Sorry couldnt exactly comprehend what you mean to say.Your code and mine look exactly the same.
hi@Sudarshan Taparia,i updated some code in your code,check here : i.sstatic.net/PZjQ0.png

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.