Volley string request error while passing string with null value as param

16,979

Solution 1

Thanks Giru Bhai for your help

I have created a new method to solve this problem while variable become null

       protected Map<String, String> getParams(){
            Map<String, String> params = new HashMap<String, String>();
            params.put("key1", value1);
            params.put("key2",value2);
            params.put("key3",value3);
            return checkParams(params);
        };


        private Map<String, String> checkParams(Map<String, String> map){               
            Iterator<Entry<String, String>> it = map.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<String, String> pairs = (Map.Entry<String, String>)it.next();
                if(pairs.getValue()==null){
                    map.put(pairs.getKey(), "");
                }
            }
            return map;             
        }

I think this is more easy than checking each values before putting it in to map

Solution 2

In Volley Request Class it calls encodeParameters method which called by getBody() method.

In getBody() method it check for all the params as

 public byte[] getBody() throws AuthFailureError {
        Map<String, String> params = getParams();
        if (params != null && params.size() > 0) {
            return encodeParameters(params, getParamsEncoding());
        }
        return null;
    }

but not for individual parameters.So you have to check for null-ability in individual parameters in getParams() method like

  protected Map<String, String> getParams(){
            Map<String, String> params = new HashMap<String, String>();
            params.put("tag", "SHOW_FILE");
            if(filename != null)params.put("filename",filename);
            return params;
        };
Share:
16,979
Vinil Chandran
Author by

Vinil Chandran

I am an android, java developer

Updated on June 13, 2022

Comments

  • Vinil Chandran
    Vinil Chandran almost 2 years

    I am using the following code for string request on volley

        pDialog = new ProgressDialog(context);
        pDialog.setMessage("Loading...");
        pDialog.setCancelable(false);
        pDialog.show();
        StringRequest strReq = new StringRequest(Method.POST,
            url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    pDialog.dismiss();
                    Log.e(tag, response);                   
                }
            }, new Response.ErrorListener() {
    
                @Override
                public void onErrorResponse(VolleyError error) {
                    pDialog.dismiss();
                }
    
            }) {
    
            protected Map<String, String> getParams(){
                Map<String, String> params = new HashMap<String, String>();
                params.put("tag", "SHOW_FILE");
                params.put("filename",filename);
                return params;
            };
    
        };      
        // Adding request to request queue
        Application.getInstance().addToRequestQueue(strReq, "get_file");
    

    If the variable filename=null, I am getting the following error:

    08-02 10:28:06.192: E/Volley(2935): [2128] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException
    08-02 10:28:06.192: E/Volley(2935): java.lang.NullPointerException
    08-02 10:28:06.192: E/Volley(2935):     at libcore.net.UriCodec.encode(UriCodec.java:132)
    08-02 10:28:06.192: E/Volley(2935):     at java.net.URLEncoder.encode(URLEncoder.java:57)
    08-02 10:28:06.192: E/Volley(2935):     at com.android.volley.Request.encodeParameters(Request.java:449)
    08-02 10:28:06.192: E/Volley(2935):     at com.android.volley.Request.getBody(Request.java:435)
    08-02 10:28:06.192: E/Volley(2935):     at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:236)
    08-02 10:28:06.192: E/Volley(2935):     at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:210)
    08-02 10:28:06.192: E/Volley(2935):     at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:106)
    08-02 10:28:06.192: E/Volley(2935):     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93)
    08-02 10:28:06.192: E/Volley(2935):     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:110)
    

    Is there need a null value check on all param I POST or any other methods to solve this problem and handle with NULL value ?