0

我正在尝试使用 volley 库制作标准的 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 Request 我得到这样的东西:

{
"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
      }
    }
  },

... 
...

}]}}

有谁知道为什么响应的格式是这样的,我怎样才能把它改成我期望的?

4

2 回答 2

1

我自己想通了。我将 JSON 作为字符串发送到第二个活动,我正在使用

new Gson().toJson(response)

将 JSONObject 更改为字符串,这改变了 JSON 格式。我不知道为什么会发生这种情况,但这就是问题所在。

于 2016-05-27T08:39:07.193 回答
0

尝试这个。用于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());
           }
       });
于 2016-05-25T16:14:57.190 回答