我正在使用Volley lib来解雇我的请求。我创建了一个自定义类,它扩展Request<T>
,如下所示:
class CustomRequest<T> extends Request<T>
使用GET的每个请求都能很好地工作。
我有一些关于POST方法的请求。例如登录需要登录和pwd,所以我在类的getParams()中放入Map,一切都很好。但是我在另一个请求上遇到了问题,因为我需要将params与任何类型的值放在一起,比如int,array等......这里的示例是设法在POST请求中传递它:
{"items":[12926315]}
那么,我怎么能这样做,因为Volley只接受Map,我当然得到400错误代码。
非常感谢你的帮助!
答案 0 :(得分:1)
我刚刚发现它为什么不起作用,我需要覆盖getBodyContentType()
方法
public String getBodyContentType()
{
return "application/json";
}
现在它有效!希望这会有所帮助:)
答案 1 :(得分:0)
public class StringRequest extends Request<String> {
private final Listener<String> mListener;
/**
* Creates a new request with the given method.
*
* @param method the request {@link Method} to use
* @param url URL to fetch the string at
* @param listener Listener to receive the String response
* @param errorListener Error listener, or null to ignore errors
*/
public StringRequest(int method, String url, Listener<String> listener,
ErrorListener errorListener) {
super(method, url, errorListener);
mListener = listener;
}
/**
* Creates a new POST request.
*
* @param url URL to fetch the string at
* @param listener Listener to receive the String response
* @param errorListener Error listener, or null to ignore errors
*/
public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {
this(Method.POST, url, listener, errorListener);
}
@Override
protected void deliverResponse(String response) {
mListener.onResponse(response);
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String parsed;
try {
parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
} catch (UnsupportedEncodingException e) {
parsed = new String(response.data);
}
return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}
}
希望这会很好。
答案 2 :(得分:0)
修改强>
因此,如果我使用下面的JsonObjectRequest
并传递JSONObject POST数据,那么它的效果非常好,但我想在我的类getBody
中将我的JSONObject发布到我的类中{ {1}}但它不起作用,因为JSONObject是我想的并且添加了一些引号
Request<T>
这是我的JSONObject:
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, dataToPost,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("LOG", "+++++++++ success");
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("LOG", "--------- error");
}
})
{
};
这里是getBody方法:
JSONObject dataToPost = new JSONObject();
JSONArray jsa = new JSONArray();
jsa.put(12926315);
jsa.put(12998018);
dataToPost.put("items", jsa);
但是从服务器端,响应是{“items”:'[12926315,12998018]'},等待{“items”:[12926315,12998018]}
有什么想法吗?