使用Android中的Volley将JSON数组主体POST到.NET Web服务

时间:2014-01-20 16:56:13

标签: android json web-services http-post android-volley

我正在尝试使用Android中的Volley发布一个JSON主体,在花了很多时间没有成功之后我正在写这个问题。

以下是我的代码段

StringRequest residentSyncRequest = new StringRequest(Request.Method.POST, Commons.URL,this,this,ADD_REQ){
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {

        HashMap<String,String> params = new HashMap<String, String>();
        params.put("Content-Type","application/json");

        return params;
    }

    @Override
    public byte[] getBody() throws AuthFailureError {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = new JSONObject();

        SharedPreferences sharedPreferences = getActivity().getSharedPreferences(Commons.PREF_NAME, Context.MODE_PRIVATE);

        try {
            jsonObject.put("RowID","0");
            jsonObject.put("LocalID","100");
            jsonObject.put("LoginUserID",sharedPreferences.getString(Commons.pref_loginUserId,""));                      
            jsonObject.put("AppToken",sharedPreferences.getString(Commons.pref_appToken,""));

        } catch (JSONException e) {
            e.printStackTrace();
        }

        jsonArray.put(jsonObject);

        return jsonArray.toString().getBytes();
    }
};
VollyRequest.getRequestQueue(getActivity()).add(residentSyncRequest);

我得到了以下回复

E/Volley﹕ [255] BasicNetwork.performRequest: Unexpected response code 400 for ...

我尝试使用postman chrome扩展程序调用相同的Web服务,该服务正常运行。

在返回byte[]之前,我不确定是否需要进行任何编码。

请帮忙。

提前致谢。

2 个答案:

答案 0 :(得分:0)

默认情况下,Volley将所有帖子参数都设置为JSON值,因此您只需要使用Request而不是StringRequest,只需添加要作为常规帖子值发布的所有JSON值。

答案 1 :(得分:0)

Volley不像JsonObject请求那样直接支持JsonArray请求。希望他们可以在下一个版本中添加这个函数,因为有很多api只提供JsonArray。

修改

实际上有一个解决方案here