我一直在尝试将我的Credentials
课程从Android发布到C#.Net网络服务器。
Volley Post方法接受如下的参数:
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return parameters;
}
getParams()
的返回类型为Map<String, String>
,但我需要Map<String, Object>
将我的课程发送到网络服务器。我甚至试图将我的类转换为json字符串,如:
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("credentials", new Gson().toJson(mCredentials, Credentials.class));
return parameters;
}
但它不起作用。服务器返回“无效参数”错误,该错误在“credentials”参数为空时引发。
服务器端没有任何问题,因为我可以使用AsyncTask
进行操作。我决定将我的请求变成Volley
,我就遇到了这个问题。
有人有解决方案吗?
答案 0 :(得分:0)
我就是这样做的(注意:params是一个jsonobject,而不是地图):
//fill params
JSONObject params = new JSONObject();
params.put("username", username);
params.put("password", password);
//create future request object
RequestFuture<JSONObject> future = RequestFuture.newFuture();
//create JsonObjectRequest
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, URL, params, future, future);
//add request to volley
MyVolley.getRequestQueue().add(jsObjRequest);
//pop request off when needed
try {
JSONObject response = future.get();//blocking code
} catch (Exception e) {
e.printStackTrace();
}
答案 1 :(得分:0)
如果您需要让您的包发送类似对象的内容,您可以将JSONObject放在JSONObject中。例如
JSONObject outer = new JSONObject();
JSONObject inner = new JSONObject();
inner.put("first_name","James");
inner.put("last_name","Bond");
outer.put("person",inner);
outer.put("id","1");