volley method jsonarrayrequest example android web-services rest android-volley

android - method - ¿Cómo enviar una solicitud POST usando una volea con cuerpo de cuerda?



volley post json example (4)

Estoy desarrollando una aplicación de Android que se comunica con un servicio web RESTful que escribí. Usar Volley para métodos GET es increíble y fácil, pero no puedo POST métodos POST .

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

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

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


Hago una función para llamar vollyrequest. solo necesitas pasar argumentos

public void callvolly(final String username, final String password){ RequestQueue MyRequestQueue = Volley.newRequestQueue(this); String url = "http://your_url.com/abc.php"; // <----enter your post url here StringRequest MyStringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { //This code is executed if the server responds, whether or not the response contains data. //The String ''response'' contains the server''s response. } }, new Response.ErrorListener() { //Create an error listener to handle errors appropriately. @Override public void onErrorResponse(VolleyError error) { //This code is executed if there is an error. } }) { protected Map<String, String> getParams() { Map<String, String> MyData = new HashMap<String, String>(); MyData.put("username", username); MyData.put("password", password); return MyData; } }; MyRequestQueue.add(MyStringRequest); }


Me gustó this , pero está sending JSON not string como se solicitó en la pregunta, volviendo a publicar el código aquí, en caso de que el github original se elimine o cambie, y alguien descubra que es útil.

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); }


Puede consultar el siguiente código (por supuesto, puede personalizarlo 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(); }


Name = editTextName.getText().toString().trim(); Email = editTextEmail.getText().toString().trim(); Phone = editTextMobile.getText().toString().trim(); JSONArray jsonArray = new JSONArray(); jsonArray.put(Name); jsonArray.put(Email); jsonArray.put(Phone); final String mRequestBody = jsonArray.toString(); StringRequest stringRequest = new StringRequest(Request.Method.PUT, OTP_Url, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.v("LOG_VOLLEY", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("LOG_VOLLEY", error.toString()); } }) { @Override public String getBodyContentType() { return "application/json; charset=utf-8"; } @Override public byte[] getBody() throws AuthFailureError { try { return mRequestBody == null ? null : mRequestBody.getBytes("utf-8"); } catch (UnsupportedEncodingException uee) { VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8"); return null; } } }; stringRequest.setShouldCache(false); VollySupport.getmInstance(RegisterActivity.this).addToRequestque(stringRequest);