发布字符串请求齐射?

时间:2014-09-20 19:17:56

标签: json string http escaping android-volley

我希望POST以下字符串到服务器并通过android volley接收JSONObject!文档说服务器的请求应采用下面给出的格式,Content-Type"application/x-www-form-urlencoded"。如何使用排球提出此请求?

{
    Username=usr&Password=passwd&grant_type=passwd
}

提前致谢!

2 个答案:

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