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


¿Cómo enviar una solicitud POST utilizando volley con cuerpo de cuerda?

Estoy desarrollando una aplicación para Android que se comunica con un servicio web RESTful que escribí. El uso de Volley para los métodos GET es impresionante y fácil, pero no puedo poner mi dedo en los métodos POST .

Quiero enviar una solicitud POST con una String en el cuerpo de la solicitud, y recuperar la respuesta en bruto del servicio web (como 200 ok , 500 server error ).

Todo lo que pude encontrar es el StringRequest que no permite enviar con datos (body), y también me limita a recibir una respuesta de String analizada. También encontré JsonObjectRequest que acepta datos (body) pero recupero una respuesta JSONObject analizada.

Decidí escribir mi propia implementación, pero no puedo encontrar una forma de recibir la respuesta en bruto del servicio web. ¿Cómo puedo hacerlo?

  • Proveedor de contenido privado de Android?
  • Aplicación de chat: qué tecnología es mejor para implementar aplicación de chat en Android
  • Método correcto para llamar al servicio Web (API) de la clase Fragment
  • Ventaja de almacenamiento de datos sin esquema en el almacenamiento de datos con el esquema
  • Cómo generar clases java desde el archivo WSDL
  • EOFException en libcore.io.Streams.readAsciiLine (Streams.java:203) cuando se utiliza HttpDelete en HttpsURLConnection
  • Java Restful Web Service sólo con Android 4.4 Mobile no otro
  • Serialice una matriz de ints para enviar usando KSOAP2
  • 2 Solutions collect form web for “¿Cómo enviar una solicitud POST utilizando volley con cuerpo de cuerda?”

    Puede consultar el siguiente código (por supuesto, puede personalizar para obtener más detalles de la respuesta de la red):

     try { RequestQueue requestQueue = Volley.newRequestQueue(this); String URL = "http://..."; JSONObject jsonBody = new JSONObject(); jsonBody.put("Title", "Android Volley Demo"); jsonBody.put("Author", "BNK"); final String requestBody = jsonBody.toString(); StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.i("VOLLEY", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("VOLLEY", error.toString()); } }) { @Override public String getBodyContentType() { return "application/json; charset=utf-8"; } @Override public byte[] getBody() throws AuthFailureError { try { return requestBody == null ? null : requestBody.getBytes("utf-8"); } catch (UnsupportedEncodingException uee) { VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8"); return null; } } @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { String responseString = ""; if (response != null) { responseString = String.valueOf(response.statusCode); // can get more details such as response.headers } return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response)); } }; requestQueue.add(stringRequest); } catch (JSONException e) { e.printStackTrace(); } 

    Me gustó éste , pero está sending JSON not string como se solicitó en la pregunta, repostando el código aquí, en caso de que el github original haya sido eliminado o cambiado, y éste encontrado útil para alguien.

     public static void postNewComment(Context context,final UserAccount userAccount,final String comment,final int blogId,final int postId){ mPostCommentResponse.requestStarted(); RequestQueue queue = Volley.newRequestQueue(context); StringRequest sr = new StringRequest(Request.Method.POST,"http://api.someservice.com/post/comment", new Response.Listener<String>() { @Override public void onResponse(String response) { mPostCommentResponse.requestCompleted(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mPostCommentResponse.requestEndedWithError(error); } }){ @Override protected Map<String,String> getParams(){ Map<String,String> params = new HashMap<String, String>(); params.put("user",userAccount.getUsername()); params.put("pass",userAccount.getPassword()); params.put("comment", Uri.encode(comment)); params.put("comment_post_ID",String.valueOf(postId)); params.put("blogId",String.valueOf(blogId)); return params; } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String,String> params = new HashMap<String, String>(); params.put("Content-Type","application/x-www-form-urlencoded"); return params; } }; queue.add(sr); } public interface PostCommentResponseListener { public void requestStarted(); public void requestCompleted(); public void requestEndedWithError(VolleyError error); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.