如何从Retrofit onResponse返回方法中的数据? [英] How can I return data in method from Retrofit onResponse?

查看:39
本文介绍了如何从Retrofit onResponse返回方法中的数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是改造的新手,我想让我的getData方法返回一个特征对象.最简单的方法是什么?

I'm new with retrofit and I want to make my getData method to return a feature object. What is the easiest way to do that?

DataService.java

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
    }
}

推荐答案

您不能返回,必须回叫".

将该内部Callback类提取为参数.

Extract that inner Callback class to a parameter.

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>(){...});

这篇关于如何从Retrofit onResponse返回方法中的数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆