Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android Volley método de eliminación, ¿por qué enviar parámetros vacíos

¡Trabajo con la biblioteca del voleo de android! Tengo algunos no entiendo el problema con la petición de envío con el método de json y DELETE del servidor. La solicitud se conectó correctamente al servidor, pero los parámetros enviados que el servidor recibirá están vacíos. ¡Pero el trabajo de la petición del jefe normaly! ¡Por favor, ayúdame!

public void deletePoint(String id) throws JSONException { dialog.show(); queue = Volley.newRequestQueue(getActivity(), new ExtHttpClientStack(new SslHttpClient().getHttpClient())); String urlRequest = getUrl(); JSONObject param = new JSONObject(); param.put("id", id); JsonObjectRequest userRequest = new JsonObjectRequest(Request.Method.DELETE, urlRequest, param, deletePointRequestSuccessListener(), reqErrorListener()){ @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = super.getHeaders(); if (headers == null || headers.equals(Collections.emptyMap())) { headers = new HashMap<String, String>(); } if (ProgressFragment.this.headers != null) { headers.keySet().removeAll(ProgressFragment.this.headers.keySet()); headers.putAll(ProgressFragment.this.headers); } headers.put("Content-Type", "application/json"); return headers; } }; userRequest.setRetryPolicy(new DefaultRetryPolicy( MY_SOCKET_TIMEOUT_MS, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); dialog.show(); queue.add(userRequest); } private Response.Listener<JSONObject> deletePointRequestSuccessListener() { return new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { dialog.hide(); Gson gson = new Gson(); Success resp = gson.fromJson(response.toString(), Success.class); if(resp.isSuccess()){ Toast.makeText(getActivity(), getString(R.string.success), Toast.LENGTH_SHORT).show(); try { getGraphData(); } catch (JSONException e) { e.printStackTrace(); } } dialog.hide(); } }; } 

  • Jackson JSON Parser rendimiento
  • JSON jsonObject.optString () devuelve String "null"
  • Configuración de la tarea asincrónica para cargar Json en una vista de lista
  • Tipo Advertencia de seguridad con Iterator JSON
  • ¿Cómo recuperar datos de la base de datos de firebase que está teniendo matriz anidada y estructura de objetos?
  • Análisis de JSON y guardarlos en la base de datos SQLite
  • Transmisión de datos de una actividad a otra mediante bundle - no se muestra en la segunda actividad
  • Cómo anidar objetos al crear JSON con JSONObject
  • 2 Solutions collect form web for “Android Volley método de eliminación, ¿por qué enviar parámetros vacíos”

    Es este problema que se ha resuelto

    Puede volver a escribir la clase HurlStack

     public class HurlStack implements HttpStack { break; case Method.DELETE: connection.setRequestMethod("DELETE"); addBodyIfExists(connection, request); // here call addBodyIfExists method break; case Method.POST: connection.setRequestMethod("POST"); 

    Solicitud con método DELETE será fácil como POST, por ejemplo

      mQueue = Volley.newRequestQueue(context); StringRequest postRequest = new StringRequest(Request.Method.DELETE, HttpUtils.URL_MSG, new Response.Listener<String>() { @Override public void onResponse(String response) { if (mCallBack!=null) { mCallBack.success(response); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (mCallBack!=null) { mCallBack.fail(null); } } } ) { @Override protected Map<String, String> getParams() { return params; } }; mQueue.add(postRequest); 

    Que sólo puede resolver el problema de los dispositivos android os 5.0 hay un nuevo problema en el dispositivo Android 4.2.2 lanzará la siguiente excepción

     java.net.ProtocolException: DELETE does not support writing 

    Para volver a escribir Volley.newRequestQueue (Contexto contexto, HttpStack pila) método puede resovle este problema

      public static RequestQueue newRequestQueue(Context context, HttpStack stack) { . . . if (stack == null) { if (Build.VERSION.SDK_INT >= 9) { stack = new OkHttpStack(); } else { // Prior to Gingerbread, HttpUrlConnection was unreliable. // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); } } . . . return queue; } 

    OkHttpStack.java (okhttp-1.6.0.jar)

     public class OkHttpStack extends HurlStack { private final OkHttpClient client; public OkHttpStack() { this(new OkHttpClient()); } public OkHttpStack(OkHttpClient client) { if (client == null) { throw new NullPointerException("Client must not be null."); } this.client = client; } @Override protected HttpURLConnection createConnection(URL url) throws IOException { return client.open(url); } } 

    Funciona para mí, esperando que el trabajo para usted también

    Trate de pasar parámetros con la URL como lo haría con una solicitud GET. Trabajado para mi
    Ejemplo de código (no probado):

     url += "?"; for(String key : params.keyset()){ url += URLEncode.encode(key,"UTF-8") +"="+ URLEncode.encode( params.get(key),"UTF-8") +"&"; } url = url.substring(0, url.length()-1); // remove last '&' char 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.