2016-05-08 5 views
-1

Я делаю http-вызов с использованием нового retrofit 2.0, и получаю обратный вызов, Я хочу использовать библиотеку gson 2.0 для разбора этого json obj и иметь возможность сделатьКак использовать gson 2.0 on - onResponse от Retrofit 2.0

jsonData.sector[2].sectorOne 

это мой обратный вызов:

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

это как мой обратный вызов будет выглядеть

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

я использую:

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

я искал везде о том, как это сделать, но я не смог найти простое решение для этого, , что это самый простой, самый простой способ для достижения этой цели?

+0

дооснащения с преобразователем Gson не дает вам JSON назад, это дает вам объект Java, так что есть не нужно использовать JSON-путь, как вы просили –

+0

, как вы разбираете этот объект? (скажем, в моем примере) @ cricket_007 –

+0

@ cricket_007? знаете ли вы, как разбирать ответ? это что-то вроде response.body.string? что-то вроде того ? –

ответ

0

Окей я объясню, как преобразовать JSON ответ на POJO:

Прежде всего, вы должны создать класс POJO в: JSON Schema 2 POJO

  1. Вставить ваш пример JSON ответ
  2. Выбор источника Тип: JSON
  3. аннотация стиль: Gson

Он будет генерировать класс POJO для вас.

Затем в методе onResponse:

 @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"); 
       } 
     } 

Не забудьте добавить compile 'com.google.code.gson:gson:2.4'

Другой способ сделать это: создать класс Pojo, как в выше.

В вашем API:

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

При вызове этого:

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

есть способ, которым вы знаете, чтобы получить доступ к vars в ответ, который я получаю от функции ? –

+0

no i dont know, я использую классы pojo для получения переменных. Правильный способ я знаю. –

+0

jsonschema2pojo создает 4 файла в папке zip, в вашем примере, который вы использовали, YourPOJOClass yourpojo = new YourPOJOClass(), какой класс из POJO вы имели в виду? можете ли вы более подробно объяснить ответ? –

Смежные вопросы