Error de petición de cadena de volea al pasar cadena con valor nulo como param
Estoy utilizando el siguiente código para la solicitud de cadenas en volea
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");
Si la variable filename = null, estoy recibiendo el siguiente error:
- GetActionBar () devuelve null después de la actualización de SDK a 5.0
- Recyclerview se bloquea al eliminar el último elemento. NullPointerException: android.view.ViewGroup $ LayoutParams android.view.View.getLayoutParams ()
- ConnectivityManager getActiveNetworkInfo () siempre es nulo incluso con tráfico de datos activo
- Prueba de objetos JSON nulos en Java / Android
- GetActivity () devuelve null en la función Fragmento
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)
¿Es necesario una comprobación de valor nulo en todos los param I POST o cualquier otro método para resolver este problema y manejar con valor NULL?
- Consecuencias de drawable.setCallback (null);
- ¿Cómo obtengo mi ubicación actual en Google Maps API V2?
- Java: La excepción en sí es nula
- En Java, ¿cómo verifica si una variable float es null?
- Android FragmentActivity devuelve null en getActionBar ()
- GCM devuelve un tipo de mensaje nulo
- Android SQLite fts3: ¿Qué debo insertar: valores nulos O cadenas vacías?
- Try catch exception devuelve siempre null
Gracias Giru Bhai por tu ayuda
He creado un nuevo método para resolver este problema mientras que la variable se convierte en nulo
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; }
Creo que esto es más fácil que comprobar cada valor antes de ponerlo en el mapa
En Volley Request Class llama encodeParameters
método encodeParameters
que llama por el método getBody()
.
En el método getBody()
comprueba todos los params
como
public byte[] getBody() throws AuthFailureError { Map<String, String> params = getParams(); if (params != null && params.size() > 0) { return encodeParameters(params, getParamsEncoding()); } return null; }
Pero no para los parámetros individuales. Así que usted tiene que comprobar la capacidad de nulo en los parámetros individuales en el método getParams()
como
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; };
- Permisos del administrador de ubicaciones de Android que se utilizarán
- Cómo programar la notificación en Android