2015-03-09 7 views
2

Я использую retrofit для работы с веб-службами в android. Мой ответ URL это что-то вроде этого:получить контент от модификации

{"data": 
    {"cus_detail": 
     { 
      "id": "1", 
      "cus_unique_id": "181612302153223", 
      "cus_company_id": "1" 
     } 
    } 
} 

Главная:

RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint("https://example.com") 
      .build(); 

    Retro service = restAdapter.create(Retro.class); 
    service.getFeed(new retrofit.Callback<Object>() { 
     @Override 
     public void success(Object obj, Response response) { 
      Log.v("RETROFIT",obj.toString()); 
     } 
     @Override 
     public void failure(RetrofitError retrofitError) { 
      System.out.println("RETROFIT_ERROR "+retrofitError); 
     } 
    }); 

Интерфейс:

public interface Retro { 
    @GET("/user?format=json&method=view_profile&cus_id=1") 
    void getFeed(Callback<Object> response); 
} 

Я получаю этот результат:

{data={cus_detail={id=1, cus_unique_id=181612302153223, cus_company_id=1}}} 

Как я могу извлекать cus_unique_id от этих данных?

ответ

1

В идеале с помощью «Дооснащения» вы создаете классы Java, которые сопоставляются с вашим JSON, и используйте их вместо Object в Callback<Object>. Я нахожу this tool полезным для создания классов. Затем вы сможете легко получить доступ к cus_unique_id.

service.getFeed(new retrofit.Callback<Data>() { 
    @Override 
    public void success(Data data, Response response) { 
     String cus_unique_id = data.cus_detail.cus_unique_id; 
     Log.v("RETROFIT",data.toString()); 
    } 
    @Override 
    public void failure(RetrofitError retrofitError) { 
     System.out.println("RETROFIT_ERROR "+retrofitError); 
    } 
}); 

Без этого, я считаю, что тип obj фактически Map<String, Object>. Поэтому вы можете попробовать что-то вроде ниже. Как @GreyBeardedGeek, я не рекомендую этот подход.

service.getFeed(new retrofit.Callback<Object>() { 
    @Override 
    public void success(Object obj, Response response) { 
     Map<String, Object> data = (Map<String, Object>) ((Map<String, Object>) obj).get("data"); 
     Map<String, Object> cus_detail = (Map<String, Object>) data.get("cus_detail"); 
     String cus_unique_id = (String) cus_detail.get("cus_unique_id"); 
     Log.v("RETROFIT",obj.toString()); 
    } 
    @Override 
    public void failure(RetrofitError retrofitError) { 
     System.out.println("RETROFIT_ERROR "+retrofitError); 
    } 
}); 
+2

Первая половина ответа является правильной. Я бы не рекомендовал вторую часть. – GreyBeardedGeek

+0

Что будет в классе данных? –

+0

@GreyBeardedGeek: Что случилось во второй части? –