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);
}
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.
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?
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
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.
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");
}
Do it like this:
private JSONObject queryApi() {
//your code
return mJsonResponse;
}
mJsonResponse = queryApi();
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With