Android排球从JsonObjectRequest更改我的响应

时间:2016-05-25 15:58:35

标签: android json android-volley jsonobjectrequest

我试图用排球库制作一个标准的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
      }
    }
  },

... 
...

}]}}

有谁知道响应的格式是这样的,为什么我可以将其更改为我期望的结果?

2 个答案:

答案 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());
           }
       });