¿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?

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); } 
  • Recurso IP en android
  • Cómo cargar archivos utilizando http poner en android?
  • El método HttpTransportSe.call () tarda hasta un minuto en llamar al servicio web
  • Java Restful Web Service sólo con Android 4.4 Mobile no otro
  • Cómo obtener la imagen del servicio web a la aplicación Android
  • ¿Cómo pasar el parámetro a un webservice usando ksoap2?
  • ¿Cómo puedo hacer que una aplicación de Android se comunique con un servidor web a través de Internet?
  • Cómo llamar al servicio web https en Android
  • ¿Qué hacer cuando Http Post se completó con éxito y mientras espera la respuesta de conectividad a Internet perdido?
  • App crash en el dispositivo HTC M8 con OS Lollipop para la llamada de servicio web
  • ¿Cómo acceder a un servicio web que se ejecuta en una PC Win7 desde un dispositivo Android no conectado a través de USB?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.