2017-03-06 135 views
4

我是新的改造,我想讓我的getData方法返回一個功能對象。什麼是最簡單的方法來做到這一點?如何從Retrofit onResponse方法返回數據?

DataService.java

public class DataService { 

    private static final String TAG = MainActivity.class.getSimpleName(); 
    private final ApiClient apiClient; 

    public DataService() { 
     apiClient = new ApiClientFactory().createApiClient(); 
    } 

    public List<Feature> getData(){ 

     apiClient.getData().enqueue(new Callback<DataResponse>() { 

      @Override 
      public void onResponse(Call<DataResponse> call, Response<DataResponse> response) { 
       List<Feature> features = response.body().getFeatures(); 
       Log.d(TAG, "Data successfully downloaded"); 
      } 

      @Override 
      public void onFailure(Call<DataResponse> call, Throwable t) { 
       Log.e(TAG, t.toString()); 
      } 
     }); 
     //I need to return features in getData method 
    } 
} 
+0

你的問題已經回答了有關http://stackoverflow.com/questions/34184088/how-can -i-return-value-from-function-on-retrofit – Rab

+0

可能的重複[如何從函數onResponse的Retrofit返回值?](http://stackoverflow.com/questions/34184088/how-can- i-return-value-from-function-on-retrofit) – Rab

+0

call.execute()。body() – uguboz

回答

3

你不能return,你必須 「回電話」。

將內部回調類提取到參數中。

public void getData(Callback<DataResponse> callback){ 
    apiClient.getData().enqueue(callback); 
} 

在你的其他代碼

// DataService service = ...; 

// Define Callback 
Callback<DataResponse> responseCallback = new Callback<DataResponse>() { 

    @Override 
    public void onResponse(Call<DataResponse> call, Response<DataResponse> response) { 
     List<Feature> features = response.body().getFeatures(); 
     Log.d(TAG, "Data successfully downloaded"); 

     // Data is returned here 
     for (Feature f: features) { 
      Log.d("feature", String.valueOf(f)); // for example 
     } 
    } 

    @Override 
    public void onFailure(Call<DataResponse> call, Throwable t) { 
     Log.e(TAG, t.toString()); 
    } 
}; 

// Call it 
service.getData(responseCallback); 

你也可以做service.getData(new Callback<DataResponse>() { ... });

+0

好吧,我主要理解它,但我怎麼能創建一個DataService實例在同一個類或傳輸responseCallback在其他類比DataService並傳遞給getData方法? –

+0

'responseCallback'是一個獨立變量,您可以在任何需要實際數據的地方對其進行定義。至於'DataService' ...你應該已經在某個Activity或Fragment中有這個了。 –

+0

好吧,這很明顯:)但我有另一個問題 - 我怎樣才能從getData方法提取下載的數據(功能)? –