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

前端 未结 4 724
春和景丽
春和景丽 2021-01-18 01:09

I am trying to run below code:

Map requestMap = new HashMap<>();
Long unixTime = System.currentTimeMillis() / LONG_1000;
requestM         


        
相关标签:
4条回答
  • 2021-01-18 01:50

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

    1. Create a class that extends StringRequest
    2. In this class override the 'parseNetworkResponse()`. It should look as follows:

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

    Once done, see if the headers is null or not. That should narrow down the problem. By the way, which version of Volley are you using. I never encountered such a problem.

    0 讨论(0)
  • 2021-01-18 02:00

    I wrote this on build.gradle.dependencies.

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

    And it worked.

    0 讨论(0)
  • 2021-01-18 02:11

    You need to override the parseNetworkResponse method in StringRequest and fix a vulnerability which 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.

    0 讨论(0)
  • 2021-01-18 02:11

    I encountered 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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题