How can I return data in method from Retrofit onResponse?

谁说胖子不能爱 提交于 2019-12-01 17:31:20

You can't return, you must "call back".

Extract that inner Callback class to a parameter.

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

In your other code

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

You can also do service.getData(new Callback<DataResponse>() { ... });

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!