我正试图用截击库制作一个标准的JsonObjectRequest。除了请求的响应之外,一切都很好。
以下是我处理请求的方式:
JSONObject jsonObject = new JSONObject();
jsonObject.put("geoLong", location.getLongitude());
jsonObject.put("geoLat", location.getLatitude());
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url,
jsonObject.toString(), createResponseListener(), createErrorListener());
jsonRequest.setRetryPolicy(new DefaultRetryPolicy(15000, 2, 1));
requestQueue.add(jsonRequest);
我期望以下json响应:
{
"total": 79,
"results": [
{
"id": "123",
"title": "test",
"distance": 3873.7552258171,
"address": {
"street": "Street",
"zip": "12345",
"city": "city",
"country": "country",
},
"geo": {
"longitude": x,
"latitude": y
}
},
...
...
]}
但从我的Volley请求中,我得到了这样的东西:
{
"nameValuePairs": {
"total": 79,
"results": {
"values": [{
"nameValuePairs": {
"id": 123,
"title": "test",
"distance": 3873.7552258171,
"address": {
"nameValuePairs": {
"street": "street",
"zip": "zip",
"city": "city",
"country": "country"
}
},
"geo": {
"nameValuePairs": {
"longitude": x,
"latitude": y
}
}
},
...
...
}]}}
有人知道为什么响应的格式是这样的吗?我该如何将其更改为我期望的格式?
我自己想出来的。我将JSON作为字符串发送到第二个活动,并使用
new Gson().toJson(response)
将JSONObject更改为String,从而更改了JSON格式。我不知道为什么会发生这种事,但这就是问题所在。
试试这个。使用HashMap
在Post请求中发送参数
HashMap<String,String> params = new HashMap<>();
params.put("geoLong", location.getLongitude());
params.put("geoLat", location.getLatitude());
然后
JsonObjectRequest jsonRequest = new JsonObjectRequest(url,
new JSONObject(params), createResponseListener(), createErrorListener());
为了更好地理解检查这个代码片段,我在发布请求时使用了这个,并得到了预期的响应。
JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
VolleyLog.v("Response:%n %s", response.toString(4));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
}
});