我正在开发一个向服务器发送大量数据的应用程序。现在我想使用volley将一组params发送到php页面。但是我无法发送它。
将params添加为数组的代码。
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));
}
}
}
答案 0 :(得分:10)
使用
HashMap<String ,String> params=new HashMap<String, String>(7);
for(int i=1;i<=7;i++)
{
params.put("params_"+i, arr[i]);
}
<{1>}类中的因为当前您在CustomJobjectRequest
类的Map中使用String
类型作为值,但在创建CustomJobjectRequest
类的对象时发送String[]
类型
修改:
要将单个参数中的所有值发送到服务器使用CustomJobjectRequest
。使用所有键值创建一个json对象:
JSONObject
发送服务器端的所有值get 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());
并转换为JSON对象并迭代以获取所有值
答案 1 :(得分:3)
使用
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
}
这项工作对我来说,希望对你有用。
答案 2 :(得分:0)
使用google json Library制作json数组。
compile 'com.google.code.gson:gson:2.6.2'
这段代码是将json数组放在请求的主体中
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);
}
答案 3 :(得分:0)
第1步
制作json param
Map<String, String> jsonParams = new HashMap<>();
第2步
make set或Arraylist为什么设置或arraylist因为不需要固定lenth
private Set<String> arr;
for(int i=1;i<=7;i++)
{
arr[i]="questionId_"+i+"_"+"ans_"+i;
arr.add("params_"+i,arr[i]);
}
步骤3将set object作为字符串传递
if (arr!= null) {
jsonParams.put("param", arr.toString());
}