我正在尝试使用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[]
之前,我不确定是否需要进行任何编码。
请帮忙。
提前致谢。
答案 0 :(得分:0)
默认情况下,Volley将所有帖子参数都设置为JSON值,因此您只需要使用Request而不是StringRequest,只需添加要作为常规帖子值发布的所有JSON值。
答案 1 :(得分:0)
Volley不像JsonObject请求那样直接支持JsonArray请求。希望他们可以在下一个版本中添加这个函数,因为有很多api只提供JsonArray。
修改强>
实际上有一个解决方案here。