VolleyPlus: NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException

I am trying to run the code below:

Map<String, Object> requestMap = new HashMap<>(); Long unixTime = System.currentTimeMillis() / LONG_1000; requestMap.put(KEY_TIME, unixTime); JWTSigner signer = new JWTSigner(SECRET); String token = signer.sign(requestMap); String url = BASE_URI + "/Data/Categories?d=" + token; StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, error.getLocalizedMessage()); } }); RequestQueue mRequestQueue = Volley.newRequestQueue(getActivity()); mRequestQueue.add(stringRequest); 

But I get the following error:

 [6056] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference at com.android.volley.toolbox.HttpHeaderParser.parseCharset(HttpHeaderParser.java:243) at com.android.volley.toolbox.HttpHeaderParser.parseCharset(HttpHeaderParser.java:262) at com.android.volley.request.StringRequest.parseNetworkResponse(StringRequest.java:70) at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:133) java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference 

I have no idea what's what. Can anyone help?

Thanks in advance.

+6
source share
4 answers

You need to override the parseNetworkResponse method in StringRequest and fix the vulnerability that does not anticipate a null header map:

 StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, error.getLocalizedMessage()); } }) { @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { if (response.headers == null) { // cant just set a new empty map because the member is final. response = new NetworkResponse( response.statusCode, response.data, Collections.<String, String>emptyMap(), // this is the important line, set an empty but non-null map. response.notModified, response.networkTimeMs); } return super.parseNetworkResponse(response); } }; 

Hope this helps.

+6
source

I traced stacktrace and I believe that the root cause of response.headers for some reason is null in the parseNetworkResponse method. I would suggest the following to confirm this.

  • Create a class that extends StringRequest
  • In this class, override 'parseNetworkResponse () `. It should look like this:

      protected Response<String> parseNetworkResponse(NetworkResponse response) { Log.d("Response Header = " + response.headers); super.parseNetworkResponse(response); } 
  • Use this class instead of StringRequest .

Once complete, see if the headers are null or not. This should narrow the problem. By the way, which version of Volley are you using. I have never encountered such a problem.

+1
source

I ran into this problem because cidEDTValue was null.

 { @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> params = new HashMap<>(); params.put("CID", cidEDTValue); return params; } } 
+1
source

I wrote this on build.gradle.dependencies.

 compile 'com.android.volley:volley:1.0.0' 

And it worked.

-1
source

All Articles