我试图用排球库制作一个标准的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
}
}
},
...
...
}]}}
有谁知道响应的格式是这样的,为什么我可以将其更改为我期望的结果?
答案 0 :(得分:1)
我自己想通了。我将JSON作为字符串发送到第二个活动,我使用
new Gson().toJson(response)
将JSONObject更改为String,这改变了JSON格式。 我不知道为什么会这样,但这就是问题所在。
答案 1 :(得分:0)
试试这个。使用HashMap
在帖子请求中发送参数
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());
}
});