How to send an array of parameters using volley in android

I am developing an application that sends a lot of data to the server. Now I want to send an array of params to a php page using volley.But, I can not send it.

Code for adding parameters as an Array.

String[] arr =new String[7]; for(int i=1;i<=7;i++) { arr[i]="questionId_"+i+"_"+"ans_"+i; } HashMap<String ,String[]> params=new HashMap<String, String[]>(7); params.put("params", arr); 

Code for server request

 RequestQueue que=Volley.newRequestQueue(this); final ProgressDialog dialog = new ProgressDialog(HealthMyHistory.this); dialog.setTitle("Please Wait"); dialog.setMessage("Sending Data"); dialog.setCancelable(false); dialog.show(); CustomJobjectRequest jsObjRequest = new CustomJobjectRequest(Method.POST, url, params, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { dialog.dismiss(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError response) { dialog.dismiss(); Toast.makeText(getApplicationContext(), "Unable to Send Data!"+" "+response.toString(), Toast.LENGTH_SHORT).show(); } }); que.add(jsObjRequest); } Problem is in CustomJobjectRequest there is no constructor available of type in which Hashmap accepts string & array as argument.How to do it ? 

Code or CustomJsonObjectRequest

  package com.example.healthcoach.data; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.toolbox.HttpHeaderParser; public class CustomJobjectRequest extends Request<JSONObject>{ private Listener<JSONObject> listener; private Map<String, String> params; public CustomJobjectRequest(String url, Map<String, String> params, Listener<JSONObject> reponseListener, ErrorListener errorListener) { super(Method.POST, url, errorListener); this.listener = reponseListener; this.params = params; } public CustomJobjectRequest(int method, String url, Map<String, String> params, Listener<JSONObject> reponseListener, ErrorListener errorListener) { super(method, url, errorListener); this.listener = reponseListener; this.params = params; } public CustomJobjectRequest(int post, String url, HashMap<String, String[]> params2, Listener<JSONObject> listener2, ErrorListener errorListener) { // TODO Auto-generated constructor stub } @Override protected Map<String, String> getParams() throws com.android.volley.AuthFailureError { return params; }; @Override protected void deliverResponse(JSONObject response) { listener.onResponse(response); } @Override protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } } 
+1
source share
4 answers

Use

 HashMap<String ,String> params=new HashMap<String, String>(7); for(int i=1;i<=7;i++) { params.put("params_"+i, arr[i]); } 

in CustomJobjectRequest , because you are currently using String type as the value in Map in the CustomJobjectRequest class, but send the String[] type when creating an object of the CustomJobjectRequest class.

Edit:

To send all values ​​in one parameter to the server, use JSONObject . Create a json object using the entire key value as:

  JSONObject jsonObject=new JSONObject(); for(int i=1;i<=7;i++) { arr[i]="questionId_"+i+"_"+"ans_"+i; jsonObject.put("params_"+i,arr[i]); } HashMap<String ,String> params=new HashMap<String, String>(); params.put("params",jsonObject.toString()); 

To send all values ​​on the server side, get params and convert to a JSON object and iterate to get all values

+10
source

Using

  Map<String, String> postParam = new HashMap<>(); int i=0; for(String object: friendIds){ postParam.put("friendIds["+(i++)+"]", object); // you first send both data with same param name as friendnr[] .... now send with params friendnr[0],friendnr[1] ..and so on } 

This work is for me, I hope it works with you.

+2
source

Use google json library to create json array.

  compile 'com.google.code.gson:gson:2.6.2' 

And this code should put the json array in the request body

 private void sendTokenToServer(final String jsonArrayString) { String tag_string_req = "string_req"; String url = Const.SEND_TOKEN_TO_SERVER; final StringRequest strReq = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, response.toString()); hideProgressDialog(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); hideProgressDialog(); } }) { @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> header = new HashMap<>(); header.put("Content-Type", "application/json; charset=utf-8"); return header; } @Override public String getBodyContentType() { return "application/json; charset=utf-8"; } @Override public byte[] getBody() throws AuthFailureError { try { return jsonArrayString.getBytes("utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } }; AppController.getInstance().addToRequestQueue(strReq, tag_string_req); } 
0
source

Step 1

Make json param

  Map<String, String> jsonParams = new HashMap<>(); 

Step 2

Make a set or Arraylist, why it is installed or arraylist, because you do not need to set a fixed lenth

  private Set<String> arr; for(int i=1;i<=7;i++) { arr[i]="questionId_"+i+"_"+"ans_"+i; arr.add("params_"+i,arr[i]); } 

Step 3 passes the given object as a string

  if (arr!= null) { jsonParams.put("param", arr.toString()); } 
0
source

Source: https://habr.com/ru/post/1272125/


All Articles