我正在开发一个向服务器发送大量数据的应用程序。现在我想使用volley将一组参数发送到php页面。但是我无法发送它。
用于将参数添加为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);
向服务器发出请求的代码
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 ?
代码或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)); } } }
用
HashMap<String ,String> params=new HashMap<String, String>(7); for(int i=1;i<=7;i++) { params.put("params_"+i, arr[i]); }
在CustomJobjectRequest类,因为你目前正在使用String类型为在地图值CustomJobjectRequest类,但发送String[]时创建的对象类型CustomJobjectRequest的类。
CustomJobjectRequest
String
String[]
编辑:
要将单个参数中的所有值发送到服务器,请使用。JSONObject使用所有键值创建json对象,如下所示:
JSONObject
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());
要在服务器端发送所有值,params并转换为JSON对象并进行迭代以获取所有值
params