2016-05-25 11 views
0

Ich versuche, eine Standard-JsonObjectRequest mit der Volley-Bibliothek zu machen. Alles funktioniert gut außer der Antwort von der Anfrage.Android Volley ändern meine Antwort von JsonObjectRequest

Hier ist, wie ich die Anfrage so mache:

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); 

ich folgende json Antwort erwarten:

{ 
"total": 79, 
"results": [ 
{ 
    "id": "123", 
    "title": "test", 
    "distance": 3873.7552258171, 
    "address": { 
    "street": "Street", 
    "zip": "12345", 
    "city": "city", 
    "country": "country", 
    }, 
    "geo": { 
    "longitude": x, 
    "latitude": y 
    } 
}, 

... 
... 

]} 

aber aus meiner Volley Anfrage ich so etwas wie diese:

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

... 
... 

}]}} 

Weiß jemand, warum die Antwort so formatiert ist und wie kann ich es so ändern, wie ich es erwarte?

+0

Dies muss in Ihren Webservices auftreten. –

+0

nein es ist nicht ich habe die postman chrome app verwendet, um die post-anfrage zu stellen und da bekomme ich das richtige json format. In der Debug-Konsole in Android Studio bekomme ich das falsche Format:/ – RyuZz

+0

Das ist ein Problem mit Ihren Webservices und nicht mit Android-Code. –

Antwort

1

Ich habe es selbst herausgefunden. Ich schicke die JSON in die zweite Tätigkeit als String und ich bin mit

new Gson().toJson(response) 

die JSONObject in einen String zu ändern und dies kann die JSON-Format geändert. Ich weiß nicht, warum das passiert ist, aber es war das Problem.

+0

wo in Ihrer Frage wurde dies erwähnt? Sie sollten wahrscheinlich so viele Details wie möglich hinzufügen –

+0

Ich dachte, es war ein Problem mit Volley, also habe ich nicht erwähnt, sorry! – RyuZz

0

Versuchen Sie dies. Verwenden Sie HashMap Parameter in Post senden Anfragen

HashMap<String,String> params = new HashMap<>(); 
params.put("geoLong", location.getLongitude()); 
params.put("geoLat", location.getLatitude()); 

Dann

JsonObjectRequest jsonRequest = new JsonObjectRequest(url, 
        new JSONObject(params), createResponseListener(), createErrorListener()); 

Zum besseren Verständnis dieses Code-Snippet inspizieren i benutzten, als ich Post-Anfragen machen und ich bekomme Antwort, wie ich erwartet.

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()); 
      } 
     }); 
+0

Die Verwendung einer HashMap hilft nicht, immer noch diese " nameValueParis "Attribute in der JSON-Antwort. – RyuZz

+0

Sie müssen '' Request.Method.POST''' in JsonObjectRequest nicht hinzufügen. Versuchen Sie, es aus den Parametern von JsonObjectRequest zu entfernen. –

+0

Und verwenden Sie hashmap –

Verwandte Themen