我已经测试了Volley和Retrofit libs对我的服务器的GET和POST请求。服务器将它们显示为GET请求。 iOS AFNetworking请求相同的api工作正常。为什么会这样?
PS。 我将此代码用于Volley,在inet的所有示例中,只需要POST方法和' getParams'。在我的案例中没有调用getParams
public void createSession(final String guid,
final String name,
final String comment,
final Date startDate,
final Date endDate,
final BooleanCallback callback) {
JsonObjectRequest registerRequest = new JsonObjectRequest(Request.Method.POST, ServerAPIBaseURLString + "sessions/",
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
}
) {
@Override
public Map<String, String> getHeaders() {
return headers();
}
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("uuid", guid);
params.put("name", name);
params.put("comment", comment);
params.put("start_date", timestampRepresentation(startDate));
params.put("end_date", timestampRepresentation(endDate));
return params;
}
};
queue.add(registerRequest);
}
我发现iOS登录服务器是(401无所谓)
&#34; PUT / api / sessions / HTTP / 1.1&#34; 302 0
&#34; PUT / ru / api / sessions / HTTP / 1.1&#34; 401 210
但Android
&#34; POST / api / sessions / HTTP / 1.1&#34; 302 0
&#34; GET / ru / api / sessions / HTTP / 1.1&#34; 405 114
答案 0 :(得分:0)
你能否将代码分成几部分,看它是否有效。
会是这样的:
你的听众成功:
Response.Listener<String> listener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
};
你的听众有错误:
Response.ErrorListener errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
};
使用params的实际发布请求:
StringRequest request = new StringRequest( Request.Method.POST, url, listener, errorListener){
protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("uuid", uuid);
return params;
};
};
致电请求:
queue.add(request);