Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting a NullPointerException while parsing JSON

Tags:

java

json

android

Everything looks correct to me: Get results object, get series array, get object at index, and get data array.

private void downloadAllData() throws JSONException {

    queryApi();

    JSONObject results = mJsonResponse.getJSONObject("Results"); // NullPointerException here
    JSONArray seriesArray = results.getJSONArray("series");

    JSONObject DataSeries1 = seriesArray.getJSONObject(0);
    JSONArray DataArray1 = DataSeries.getJSONArray("data");

    JSONObject DataSeries2 = seriesArray.getJSONObject(1);
    JSONArray DataArray2 = DataSeries.getJSONArray("data");

JSON feed:

{"status":"REQUEST_SUCCEEDED","responseTime":36,"message":[],"Results":{
"series":
[{"seriesID":"431432","data":[{"year":"1977","period":"M12","periodName":"December","value":"160.7","footnotes":[{}]},{"year":"1977","period":"M11","periodName":"November","value":"161.3","footnotes":[{}]},{"year":"1977","period":"M10","periodName":"October","value":"162.2","footnotes":[{}]},{"year":"1977","period":"M09","periodName":"September","value":"162.5","footnotes":[{}]},{"year":"1977","period":"M08","periodName":"August","value":"163.4","footnotes":[{}]},{"year":"1977","period":"M07","periodName":"July","value":"164.0","footnotes":[{}]},{"year":"1977","period":"M06","periodName":"June","value":"164.6","footnotes":[{}]},{"year":"1977","period":"M05","periodName":"May","value":"165.8","footnotes":[{}]},{"year":"1977","period":"M04","periodName":"April","value":"166.7","footnotes":[{}]},{"year":"1977","period":"M03","periodName":"March","value":"167.9","footnotes":[{}]},{"year":"1977","period":"M02","periodName":"February","value":"169.1","footnotes":[{}]},{"year":"1977","period":"M01","periodName":"January","value":"170.6","footnotes":[{}]}]},
{"seriesID":"321432","data":[{"year":"1977","period":"M12","periodName":"December","value":"50.5","footnotes":[{}]},{"year":"1977","period":"M11","periodName":"November","value":"50.4","footnotes":[{}]},{"year":"1977","period":"M10","periodName":"October","value":"50.5","footnotes":[{}]},{"year":"1977","period":"M09","periodName":"September","value":"50.6","footnotes":[{}]},{"year":"1977","period":"M08","periodName":"August","value":"50.6","footnotes":[{}]},{"year":"1977","period":"M07","periodName":"July","value":"50.6","footnotes":[{}]},{"year":"1977","period":"M06","periodName":"June","value":"50.5","footnotes":[{}]},{"year":"1977","period":"M05","periodName":"May","value":"50.1","footnotes":[{}]},{"year":"1977","period":"M04","periodName":"April","value":"49.4","footnotes":[{}]},{"year":"1977","period":"M03","periodName":"March","value":"48.8","footnotes":[{}]},{"year":"1977","period":"M02","periodName":"February","value":"48.3","footnotes":[{}]},{"year":"1977","period":"M01","periodName":"January","value":"47.6","footnotes":[{}]}]}]
}}

Logcat:

04-10 22:16:59.519  10910-10937/com.learn.kent.mojito E/AndroidRuntime﹕ FATAL EXCEPTION: IntentService[DownloadService]
    Process: com.learn.kent.mojito, PID: 10910
    java.lang.NullPointerException
            at com.learn.kent.mojito.service.DownloadService.downloadAllData(DownloadService.java:151)
            at com.learn.kent.mojito.service.DownloadService.onHandleIntent(DownloadService.java:83)
            at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:212)
            at android.os.HandlerThread.run(HandlerThread.java:61)

04-10 22:16:59.659  10910-10910/com.learn.kent.mojito D/OpenGLRenderer﹕ 
Enabling debug mode 0
04-10 22:16:59.729  10910-10910/com.learn.kent.mojito I/ActivityManager﹕ Timeline: Activity_idle id: android.os.BinderProxy@42db38a8 time:59558459
04-10 22:17:00.369  10910-10910/com.learn.kent.mojito D/DownloadService﹕ {"Results":{"series":[{"data":[{"value":"50.5","year":"1977","period":"M12","footnotes":[{}],"periodName":"December"},{"value":"50.4","year":"1977","period":"M11","footnotes":[{}],"periodName":"November"},{"value":"50.5","year":"1977","period":"M10","footnotes":[{}],"periodName":"October"},{"value":"50.6","year":"1977","period":"M09","footnotes":[{}],"periodName":"September"},{"value":"50.6","year":"1977","period":"M08","footnotes":[{}],"periodName":"August"},{"value":"50.6","year":"1977","period":"M07","footnotes":[{}],"periodName":"July"},{"value":"50.5","year":"1977","period":"M06","footnotes":[{}],"periodName":"June"},{"value":"50.1","year":"1977","period":"M05","footnotes":[{}],"periodName":"May"},{"value":"49.4","year":"1977","period":"M04","footnotes":[{}],"periodName":"April"},{"value":"48.8","year":"1977","period":"M03","footnotes":[{}],"periodName":"March"},{"value":"48.3","year":"1977","period":"M02","footnotes":[{}],"periodName":"February"},{"value":"47.6","year":"1977","period":"M01","footnotes":[{}],"periodName":"January"}],"seriesID":"21432"},{"data":[{"value":"62.1","year":"1977","period":"M12","footnotes":[{}],"periodName":"December"},{"value":"61.9","year":"1977","period":"M11","footnotes":[{}],"periodName":"November"},{"value":"61.6","year":"1977","period":"M10","footnotes":[{}],"periodName":"October"},{"value":"61.4","year":"1977","period":"M09","footnotes":[{}],"periodName":"September"},{"value":"61.2","year":"1977","period":"M08","footnotes":[{}],"periodName":"August"},{"value":"61.0","year":"1977","period":"M07","footnotes":[{}],"periodName":"July"},{"value":"60.7","year":"1977","period":"M06","footnotes":[{}],"periodName":"June"},{"value":"60.3","year":"1977","period":"M05","footnotes":[{}],"periodName":"May"},{"value":"60.0","year":"1977","period":"M04","footnotes":[{}],"periodName":"April"},{"value":"59.5","year":"1977","period":"M03","footnotes":[{}],"periodName":"March"},{"value":"59.1","year":"1977","period":"M02","footnotes":[{}],"periodName":"February"},{"value":"58.5","year":"1977","period":"M01","footnotes":[{}],"periodName":"January"}],"seriesID":"431432"}]},"message":[],"status":"REQUEST_SUCCEEDED","responseTime":44}
04-10 22:17:01.489  10910-10937/com.learn.kent.mojito I/Process﹕ Sending signal. PID: 10910 SIG: 9

The JSON response in the logcat represents log.d(TAG, mJsonResponse.tostring)

Initializing mJsonResponse using Volley:

private void queryApi() throws JSONException {
        try {
            jsonObjectQuery.put("seriesid", seriesid);
            jsonObjectQuery.put("startyear", "" + startYear);
            jsonObjectQuery.put("endyear", "" + endYear);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        JsonObjectRequest jsonObjRequest = new JsonObjectRequest(Request.Method.POST, url,
                jsonObjectQuery, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                mJsonResponse = response; <--------------------------------
                Log.d(TAG, mJsonResponse.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        }) {

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json; charset=utf-8");
                return headers;
            }
        };
        queue.add(jsonObjRequest);
    }
like image 615
Pwnies Avatar asked Apr 11 '15 06:04

Pwnies


People also ask

Why is my jsonobject's response null?

This makes no sense. You've created a new, empty JsonObject then attempt to retrieve an element from it using your entire JSON string as the property name. Therefore, yes ... response is null. Your JSON is an object. It contains two fields; results which is an array of objects and status which is a String.

How to avoid NullPointerException in Java?

Answer: Some of the best practices to avoid NullPointerException are: Use equals () and equalsIgnoreCase () method with String literal instead of using it on the unknown object that can be null. Use valueOf () instead of toString () ; and both return the same result. Use Java annotation @NotNull and @Nullable. #4) What is the null value in Java?

Why do I get a null pointer exception when calling a method?

If you are dealing with static variables or static method than you won’t get null pointer exception even if you have your reference variable pointing to null because static variables and method call are bonded during compile time based on class name and not associated with object

Should Gson return NULL if JSON is corrupted?

If the top-level String is null, Gson returns null. If the JSON is corrupted, it's a good idea to surface it to the client code, instead of silently ignoring it. That is what Gson does. Sorry, something went wrong. Should this be surfaced with JSONException but not NullPointerException? Sorry, something went wrong.


3 Answers

It is async task that causes this error. You have to ensure that mJsonResponse = response; is called before JSONObject results = mJsonResponse.getJSONObject("Results");.
Like:

public void onResponse(JSONObject response) {
    mJsonResponse = response; <--------------------------------
    Log.d(TAG, mJsonResponse.toString());
    JSONObject results = mJsonResponse.getJSONObject("Results"); // NullPointerException here
    JSONArray seriesArray = results.getJSONArray("series");

    JSONObject DataSeries1 = seriesArray.getJSONObject(0);
    JSONArray DataArray1 = DataSeries.getJSONArray("data");

    JSONObject DataSeries2 = seriesArray.getJSONObject(1);
    JSONArray DataArray2 = DataSeries.getJSONArray("data");
}
like image 92
SilentKnight Avatar answered Oct 11 '22 08:10

SilentKnight


Do it like this:

private JSONObject queryApi() {
    //your code  
    return mJsonResponse;
}

mJsonResponse = queryApi();
like image 40
priyank Avatar answered Oct 11 '22 07:10

priyank


JSONObject DataSeries1 = seriesArray.getJSONObject(0);
JSONArray DataArray1 = DataSeries1.getJSONArray("data");

JSONObject DataSeries2 = seriesArray.getJSONObject(1);
JSONArray DataArray2 = DataSeries2.getJSONArray("data");

Try this its work for me

like image 1
Deepak Kishore S Avatar answered Oct 11 '22 09:10

Deepak Kishore S