2016-05-08 13 views
-1

Ich mache einen http Anruf mit dem neuen Retrofit 2.0, und bekomme einen Rückruf, Ich möchte Gson 2.0 Bibliothek verwenden, um diese JSON Obj analysieren und in der Lage sein zu tunWie benutze ich gson 2.0 on - onResponse von Retrofit 2.0

jsonData.sector[2].sectorOne 

das ist mein Rückruf:

retrofitApi.Factory.getInstance().getCallData().enqueue(new Callback<ResponseBody>() { 
      @Override 
      public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 

       try { 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 

      @Override 
      public void onFailure(Call<ResponseBody> call, Throwable t) { 
       Log.d("myLogs", "failed to Retrive Data"); 
       Log.d("myLogs", "becouse: "+t); 
       largeTextVar.setText("failed: " + t); 
      } 
     }); 

dies ist, wie mein Rückruf wie

aussehen
{ 
    "data": { 
    "sector": [ 
     [ 
     { 
      "scanned": false, 
      "sectorOne": "", 
      "sectorTwo": "", 
      "sectorThree": "" 
     }, 
     { 
      "scanned": false, 
      "sectorOne": "", 
      "sectorTwo": "", 
      "sectorThree": "" 
     } 
     ] 
    ] 
    }, 
    "curserLocation": { 
    "elevation": 30, 
    "horizontal": 105 
    } 
} 
01 mit

ich bin:

compile 'com.squareup.retrofit2:retrofit:2.0.1' 
compile 'com.squareup.retrofit2:converter-gson:2.0.1' 

i überall auf sah, wie dies zu tun, aber ich konnte eine einfache Lösung für diese nicht finden, was ist die einfachste und einfachste Weg, dies zu erreichen?

+0

Retrofit mit dem Gson Konverter nicht geben Sie JSON zurück, es gibt Ihnen ein Java-Objekt, so dass es keine Notwendigkeit, einen JSON-Pfad zu verwenden, wie Sie gefragt haben –

+0

Wie parsen Sie dieses Objekt? (Lassen Sie uns in meinem Beispiel sagen) @ cricket_007 –

+0

@ cricket_007? Weißt du, wie man die Antwort analysiert? es ist so etwas wie response.body.string? so ähnlich ? –

Antwort

0

Okey ich werde erklären, wie man konvertieren JSON Antwort auf POJO: JSON Schema 2 POJO

  1. Einfügen Ihrem Beispiel JSON Antwort
  2. Quelle auswählen Typ:

    allererst Sie eine POJO Klasse erstellen müssen: JSON

  3. Anmerkungsstil: Gson

Es wird eine Klasse für Sie generieren.

Dann in Ihrer onResponse Methode:

 @Override 
     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 
      if(response.code()==200){ 
      Gson gson = new GsonBuilder().create(); 
       YourPOJOClass yourpojo=new YourPOJOClass(); 
       try { 
        yourpojo= gson.fromJson(response.body().toString(),YourPOJOClass.class); 
       } catch (IOException e) { 
        // handle failure to read error 
        Log.v("gson error","error when gson process"); 
       } 
     } 

Vergessen Sie nicht compile 'com.google.code.gson:gson:2.4'

andere Art und Weise hinzuzufügen, dies zu tun: eine pojo Klasse wie in oben erstellen.

In Ihrem API:

@POST("endpoint") 
public Call<YourPOJOClass> exampleRequest(); 

Beim Aufruf dieser:

OkHttpClient okClient = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).build(); 

    Gson gson = new GsonBuilder() 
      .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") 
      .create(); 

    Retrofit client = new Retrofit.Builder() 
      .baseUrl(baseUrl) 
      .addConverterFactory(GsonConverterFactory.create(gson)) 
      .client(okClient) 
      .build(); 

    YourApiClass service = client.create(YourApiClass.class); 

    Call<YourPOJOClass> call=service.exampleRequest(); 
    call.enqueue(new Callback<YourPOJOClass>() { 
     @Override 
     public void onResponse(Call<YourPOJOClass> call, Response<YourPOJOClass> response) { 
      //already Gson convertor factory converted your response body to pojo 
      response.body().getCurserLocation(); 
     } 

     @Override 
     public void onFailure(Call<YourPOJOClass> call, Throwable t) { 

     } 
    }); 
+0

gibt es eine Möglichkeit, die Vars direkt auf die Antwort, die ich von der Funktion erhalten ? –

+0

Nein, ich weiß nicht, ich verwende Pojo-Klassen, um Variablen zu erhalten. Die richtige Art, die ich kenne. –

+0

jsonschema2pojo erstellt 4 Dateien im Zip-Ordner, in Ihrem Beispiel verwendeten Sie, YourPOJOClass yourpojo = new YourPOJOClass(), welche Klasse von POJO meinst du? Kannst du die Antwort ein wenig mehr erklären? –