Volley传递JSONobject作为参数POST方法

时间:2014-07-09 05:31:31

标签: java android android-volley

我正在使用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发送参数时,它是否会在稍后的字符串中附加?

1 个答案:

答案 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);