2015-11-20 3 views
0

Я использую Retrofit 1.9.0 в Android Studio, чтобы получить ответ от моего REST API.Как получить разные объекты с дооснащением Android

Метод, который я хочу сделать, это GET, по этому адресу: http://dotfreeride.com/api/rest/adventures.php

Я успешно получен ответ на другой API, но это был только один объект, это имеет 3 больших объектов.

Мой IApiMethods интерфейс выглядит так:

@GET("/adventures.php") 
JSONObject getAdventures(
     Callback<AdventuresApi> cb 
); 

Мой AdventuresApi (класс Model), как это:

public class AdventuresApi { 
    public String adventure_id; 
    public String trimaps_context; 
    public String name; 
    public String video_url; 

    public List<ArrayPoi> array_poi; 

    public class ArrayPoi { 
     String poi_id; 
     String name; 
     String lat; 
     String lng; 
     String video_url; 
    } 
} 

Мой дооснащения вызов в деятельности, как это:

RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint(API_URL) 
      .build(); 
    IApiMethods methods = restAdapter.create(IApiMethods.class); 
    Callback callback = new Callback() { 
     @Override 
     public void success(Object o, Response response) { 

     } 

     @Override 
     public void failure(RetrofitError error) { 
      Log.e("JSON", "NO DATA!"); 
     } 
    }; 
    methods.getAdventures(callback); 

Я действительно не знаю, как получить объекты, я хочу получить имя объекта (Пример: где trimaps_context это «глагол», мне нужно название «Powder Hound»)

Для одного объекта я успешно сделал это, как это в onResponse(Object o, Response response):

(ProfileApi) profileData = (ProfileApi) o; 
Log.e("JSON", profileData.name + " " + profileData.email); 

ответ

3

1) Вы пытаетесь совместить как синхронный и асинхронный вызов. Если вы хотите, чтобы выполнить запрос асинхронно, вы должны определить это следующим образом:

@GET("/adventures.php") 
void getAdventures(
     Callback<List<AdventuresApi>> cb 
); 

2) Не создавайте RestAdapter экземпляр каждый раз, когда вы звоните запрос. Это действительно тяжелая операция. Используйте singleton pattern. Вы можете просто позвонить:

ApiManager.getAdapter().getAdventures(...); 

3) отображение объекта обеспечивается параметризованном Callback класса:

ApiManager.getAdapter().getAdventures(
    new Callback<List<AdventuresApi>>() { 
     @Override 
     public void success(List<AdventuresApi> adventures, Response response) { 
      // here you can access the adventures list 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      // handle error 
     } 
    }); 
Смежные вопросы