我正在使用Request类向我的服务器发出POST请求。我必须发送一些参数。所以我这样做。
private final Listener<String> mListener;
private Map<String, String> mParams = new HashMap<String, String>();
public ChangePwdRequest(int method, String username, String currentPwd,
String newPwd, Listener<String> mListener, ErrorListener listener) {
super(Method.POST, Utilites.CHANGEPWD_REQUEST_URL,listener);
mParams.put("user_id", username);
mParams.put("current_password", currentPwd);
mParams.put("new_password", newPwd);
this.mListener = mListener;
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return mParams;
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
Gson mGson = new Gson();
String jsonString = new String(response.data);
ChangePwdResponse cateResponse = mGson.fromJson(jsonString,
ChangePwdResponse.class);
return Response.success(cateResponse.result, getCacheEntry());
}
@Override
protected void deliverResponse(String response) {
mListener.onResponse(response);
}
我从服务器获得响应。它工作正常。但是如果我想将一些JSONdata发送到我的Post Call,那么我应该使用JsonRequest。对吗?
我的问题是 1.由于Request是所有请求的基类,可以在Json中发送参数吗? 2.当我在上面的代码片段中发送使用map发送参数时,它是否会在稍后的字符串中附加?
答案 0 :(得分:0)
答案1.使用Request类,您可以直接覆盖Map<String, String> getParams()
方法并在hashmap中为post请求设置paramas。对于设置JsonObject,您可能必须覆盖getBody(),以返回jsonObj.toString().getBytes("utf-8")
。但我建议你按照规则DRY使用JsonObjectRequest
课程或StringObjectRequest
课程。
答案2.它将其转换为编码的String,将其转换为字节数组,然后打开一个连接对象,并在该连接对象的输出流上写入字节数组,或者在HttpRequest对象中设置实体。
挖掘Volley源代码
在HurlStack类中,api level =&gt; 9为了使POST
请求与body request.getBody()
方法被调用,返回[]byte
写在连接对象的输出流上。
在HttpClientStack类中,对于api级别&lt; 9,将字节数组设置为HttpEntity类的实体。
HttpEntity entity = new ByteArrayEntity(request.getBody());
httpRequest.setEntity(entity);