我希望POST
以下字符串到服务器并通过android volley接收JSONObject!文档说服务器的请求应采用下面给出的格式,Content-Type
为"application/x-www-form-urlencoded"
。如何使用排球提出此请求?
{
Username=usr&Password=passwd&grant_type=passwd
}
提前致谢!
答案 0 :(得分:2)
首先你应该覆盖你的getbody()并在该函数中编码你的参数...例如:
@Override
public byte[] getBody() {
Map<String, String> params = new HashMap<String, String>();
params.put("password", "yourpassword");
if (params != null && params.size() > 0) {
return encodeParameters(params, getParamsEncoding());
}
return null;
}
protected byte[] encodeParameters(Map<String, String> params, String paramsEncoding) {
StringBuilder encodedParams = new StringBuilder();
try {
for (Map.Entry<String, String> entry : params.entrySet()) {
encodedParams.append(URLEncoder.encode(entry.getKey(), paramsEncoding));
encodedParams.append('=');
encodedParams.append(URLEncoder.encode(entry.getValue(), paramsEncoding));
encodedParams.append('&');
}
return encodedParams.toString().getBytes(paramsEncoding);
} catch (UnsupportedEncodingException uee) {
throw new RuntimeException("Encoding not supported: " + paramsEncoding, uee);
}
}
这是对你的参数进行编码的方式.... volley实际上已经实现了以下功能,并且它有效,对我来说它有效...希望这对你有所帮助。
答案 1 :(得分:0)
所以你的问题很混乱。 POST正文参数不在JSON正文中编码。
我还没有对它进行过测试,但是如果你了解HTTP,你应该从这里了解其余部分。
final Map<String, String> postBody = new HashMap<String, String>();
postBody.put("Username", "usr");
postBody.put("Password", "passwd");
postBody.put("grant_type", "passwd");
final Listener<JSONObject> responseListener = ...;
Request request = new Request<JSONObject>(Method.POST, "http://example.com", errorListener) {
void deliverResponse(JSONObject obj) {
responseListener.onResponse(obj);
}
protected Map<String, String> getPostParams() throws AuthFailureError {
return postBody;
}
protected Response<T> parseNetworkResponse(NetworkResponse response) {
if (response.status == 200) {
JSONObject responseBody = new JSONObject(new String(response.data));
return Response.success(body, getCacheEntry());
} else {
return new Response<JSONObject>(new VolleyError(response);
}
}
};
requestQueue.add(request);