我正在使用这个简单的代码:
JsonObjectRequest req = new JsonObjectRequest(Request.Method.PUT, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
delegate.postNotificationSucced();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
Log.d(TAG, ""+error.getMessage()+","+error.toString());
delegate.postNotificationFailed((APIErrors) error);
}
}){
@Override
public Map<String, String> getParams() throws AuthFailureError {
Map<String,String> headers = new HashMap<String, String>();
headers.put("Content-Type","application/x-www-form-urlencoded");
headers.put("state", Boolean.toString(isChecked));
return headers;
}
@Override
protected VolleyError parseNetworkError(VolleyError volleyError){
APIErrors error = null;
if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){
error = new APIErrors(new String(volleyError.networkResponse.data));
}
return error;
}
};
当我使用Request.Method.GET
或POST
代替PUT
时,会调用getParams()
方法,但不会使用PUT
方法。
我的问题是我的API需要PUT
方法。
如何使用PUT
方法传递参数。
使用PUT
方法调用getHeaders()
方法,我可以通过它传递参数吗?
在我的情况下,我解决了将我的JsonObjecRequest更改为StringRequest的问题,如@ishmaelMakitla所建议的那样。现在我在getParams()
内传递。
我注意到你没有使用响应对象 - 所以 也许将请求从JsonObjectRequest更改为StringRequest - 记住你需要更改Response.Listener() 到Response.Listener()和onResponse(JSONObject响应) to onResponse(String response)....如果您需要进一步的帮助,请大喊大叫。一世 希望这能带来一些可行的解决方案。
原因是使用JsonObjectRequest,参数必须通过构造函数的第三个参数
jsonRequest - 要发布的JSONObject。 Null是允许的 并表示不会随请求一起发布参数。
您可以read获取更多信息的文档。
答案 0 :(得分:2)
由于您没有将响应对象用于任何事情 - 您应该将请求从JsonObjectRequest
更改为StringRequest
- 请记住,您需要将Response.Listener<JSONObject>()
更改为Response.Listener<String>()
} {o nResponse(JSONObject response)
到onResponse(String response)
....这里是StringRequest Gist我创建的 - 您只需在代码中“即插即用”并替换JsonObjectRequest
码。