【发布时间】:2017-08-24 03:06:07
【问题描述】:
我有一个 API 端点,需要在 POST 请求中将参数作为 JsonObject 发送。
我将得到的响应不是 Json,而是一个小的 CSV 字符串。
代码是
stringRequest = new StringRequest(Request.Method.GET, "http://apitest.eezyrent.com/api/userauthentication/SignUp",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
Toast.makeText(getApplication(), response.toString(), Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplication(), error.getMessage(), Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> jsonParams2 = new HashMap<String, String>();
jsonParams2.put("vcFName", firstname.getText().toString());
jsonParams2.put("vcLname", lastname.getText().toString());
jsonParams2.put("vcMobileNo", phone_no.getText().toString());
jsonParams2.put("vcGender", gender_short);
jsonParams2.put("vcEmailAddress", email.getText().toString());
jsonParams2.put("vcPassword", password.getText().toString());
jsonParams2.put("vcFBID", "");
jsonParams2.put("intLoginUserID", "");
jsonParams2.put("SignUpFrom", "Web");
jsonParams2.put("intloginid", "");
jsonParams2.put("AlreadyRegister", "");
return jsonParams2;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json");
headers.put( "charset", "utf-8");
return headers;
}
};
上面的代码很大程度上受到了来自这个社区的回答的启发,但这似乎并不能解决我的问题。
我收到 Volley 错误 405。
E/Volley﹕ [112549] BasicNetwork.performRequest: Unexpected response code 405 for http://myurl
事实上,如果我使用 AsyncTask 而不是 Volley,使用相同的 json 作为参数和相同的端点 url。有用!! AsyncTask 代码是从这个问题中找到的。 Java HttpClient changing content-type?
但我想使用 Volley,有什么办法可以解决这个问题?
示例 JSON 对象
{"vcFName":"Ron","vcLname":"Weasley","vcMobileNo":"555888999","vcGender":"M","vcEmailAddress":"someone@somewhere.com","vcPassword":"123456","vcFBID":"","intLoginUserID":'',"SignUpFrom":"Web","intloginid":"","AlreadyRegister":""}
【问题讨论】:
-
你可以让
JsonObjectRequest看到这个androidhive.info/2014/09/android-json-parsing-using-volley -
@KaranMer 我已经尝试过了,我得到了同样的错误。 JsonObjectRequest 对我也没有用,因为响应是 CSV 字符串而不是 JSON 字符串。
-
在这种情况下,您需要提出自定义请求,请参阅此 SO 线程 stackoverflow.com/questions/30859044/…
-
@KaranMer 但同样,该助手类是用于 JsonArrayRequest 而不是 StringRequest。你能修改那个助手类吗,因为我不明白。
标签: android