2015-11-20 78 views
0

我在Android Studio中使用改進版1.9.0以獲取來自我的REST API的響應。如何通過改造獲取不同的對象Android

我想要做的方法是GET,在此URL:http://dotfreeride.com/api/rest/adventures.php

我成功地檢索另一個API響應但只有1對象,有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); 

我真的不知道如何獲取對象,我想獲取對象的名稱(例如:where trimaps_context是「動詞」,我需要命名爲「粉獵犬」)

對於單個對象我成功地做到了像這樣的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(
    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 
     } 
    }); 

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

3)對象映射通過參數化Callback類提供