我的数组看起来像这样
arrayname[{"code" : "abc","code2":"cba",}]
我希望将其作为参数发送,将其放入getParam()函数中,并使用volley到我的服务器
问题看起来与此相似
Volley pass array as parameters
任何帮助怎么做?
提前致谢
答案 0 :(得分:1)
这是我制作的应用程序中的一种方法,可以执行您要执行的操作。 (我想?)
我的问题是我有多个要发送的帖子参数,但其中一个是数组。
例如:
http://www.yourDB.com/getData.php?param1=blah¶m2=blah¶m3=[ [array] ].
所以......为了确保PHP页面能够理解我正在发送数组,我按如下方式向数组中添加数据(注意参数后面的'[]'。
postParams.add(new String[]{"param3[]", itemName});
所以......服务器看到了这个:
http://www.yourDB.com/getData.php?param1=blah¶m2=blah¶m3[]=item1¶m3[]=item2¶m3[]=item3...
理解的关键是这一部分:
"@Override
public byte[] getBody() throws AuthFailureError {"
诀窍是你将String数组的ArrayList发送到方法中并覆盖getBody()部分,如下所示:
private void Url_2_Adapter(String url, final ArrayList<String[]> postParams) {
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// do something with response
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Log.i(TAG, "WE HAD ERROR " + error.toString());
try {
Toast.makeText(getActivity(), "Server says: Error code " + error.networkResponse.statusCode + "\nIf this continues, please report it! Thanks.", Toast.LENGTH_LONG).show();
}
catch (Exception e){
}
}
}) {
@Override
public byte[] getBody() throws AuthFailureError {
StringBuilder result = new StringBuilder();
boolean first = true;
for (String[] entry : postParams)
{
if (first) {
first = false;
} else {
result.append("&");
}
try {
result.append(URLEncoder.encode(entry[0], "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry[1], "UTF-8"));
} catch (UnsupportedEncodingException e) {
// this basically will never happen :)
}
}
return result.toString().getBytes();
}
};
Z_VolleySingleton.getInstance().getRequestQueue().add(stringRequest);
}
答案 1 :(得分:0)
我没有参与Volley库,我使用了AsyncHttpClient:你可以在这里应用的逻辑如下:
JSONArray jsonArray=new JSONArray();
JSONObject jsonObject=new JSONObject();
jsonObject.put("code", abc);
jsonObject.put("code2", cba);
jsonArray.put(jsonObject);// this you need to pass using volley library
答案 2 :(得分:0)
为此,您必须制作JsonArrayRequest。在Volley中,JsonArrayRequest类使用该类用于JsonArray请求。
这是JsonArrayRequest类中可用的方法。
public JsonArrayRequest(int method, String url, JSONArray jsonRequest,
Listener<JSONArray> listener, ErrorListener errorListener) {
super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
errorListener);
}
这可能会对你有所帮助:
JSONArray jArrayInput=new JSONArray();
JSONObject jObjectInput=new JSONObject();
jObjectInput.put("code", abc);
jObjectInput.put("code2", cba);
jArrayInput.put(jObjectInput);
JsonArrayRequest request = new JsonArrayRequest(Method.POST, /*Your base url*/, jArrayInput , new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
//Here success response
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//Here error response
}
});
MyVolley.getRequestQueue().add(request);