我正在使用Volley与API进行交互。我需要向返回JSON数组的服务发送post请求(带参数)。
JsonObjectRequest有一个构造函数,它接受一个方法和一组参数
JsonObjectRequest(int method, java.lang.String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener)
但是,JSONArrayRequest (我需要的那个)只有一个表单构造函数
JsonArrayRequest(java.lang.String url, Response.Listener<JSONArray> listener, Response.ErrorListener errorListener)
我怎样才能发送一个带数据的POST请求呢?
发布于 2013-08-05 15:11:47
他们可能会在以后添加它,但在此期间,您可以自己添加所需的构造函数:
public JsonArrayRequest(int method, String url, JSONObject jsonRequest,
Listener<JSONArray> listener, ErrorListener errorListener) {
super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(),
listener, errorListener);
}
这没有经过测试,尽管我认为这没有理由不起作用,因为实现细节在超类中:JsonRequest
。
试一试,看看它是否有效。
编辑:
我说了算!在我回答这个问题之后,他们花了将近两年的时间,但是排球团队在2015年3月19日将这个构造器添加到了repo中。你猜怎么着?这就是确切的语法。
发布于 2014-08-01 22:22:17
我很懒,没有自己构建Volley库(只是使用.jar),因此在匿名的新JSONArrayRequest
中没有源code...so,我添加了以下函数:
// NO CONSTRUCTOR AVAILABLE FOR POST AND PARAMS FOR JSONARRAY!
// overridden the necessary functions for this
@Override
public byte[] getBody() {
try {
return paramsArray.toString().getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
@Override
public int getMethod() {
return Method.POST;
}
发布于 2015-02-22 01:11:25
这段代码将产生你想要的东西
Volley.newRequestQueue(context).add(
new JsonRequest<JSONArray>(Request.Method.POST, "url/", null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("param1", "one");
params.put("param2", "two");
return params;
}
@Override
protected Response<JSONArray> parseNetworkResponse(
NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser
.parseCharset(response.headers));
return Response.success(new JSONArray(jsonString),
HttpHeaderParser
.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
});
https://stackoverflow.com/questions/18048806
复制相似问题