gpt4 book ai didi

android - 如何在 OnResponse 函数之外使用 Retrofit 响应?

转载 作者:行者123 更新时间:2023-11-29 15:39:14 25 4
gpt4 key购买 nike

我想获取改造响应列表并在 OnResponse 函数之外使用它,但是当我尝试这样做时,我总是得到一个空对象。这是我的源代码

ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

Call<ActivitiesResponse> call = apiService.getUserActivities(id);
call.enqueue(new Callback<ActivitiesResponse>() {
// If success
@Override
public void onResponse(Call<ActivitiesResponse>call, Response<ActivitiesResponse> response) {

list = response.body().getActivities();// I'm getting a not null response

}
// If failed
@Override
public void onFailure(Call<ActivitiesResponse>call, Throwable t) {
// Log error here since request failed
Log.e(TAG, t.toString());

}
});

//When I try to use the list here I'm getting a null object

最佳答案

请求是异步的,因此当您尝试返回值时,请求可能尚未完成,因此您无法在请求之外使用它。如果您想从请求返回值,请使用回调接口(interface)。

将代码更改为方法并传递回调参数

示例

public void doRequest(final ApiCallback callback) {
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

Call<ActivitiesResponse> call = apiService.getUserActivities(id);
call.enqueue(new Callback<ActivitiesResponse>() {
// If success
@Override
public void onResponse(Call<ActivitiesResponse>call, Response<ActivitiesResponse> response) {

list = response.body().getActivities();
callback.onSuccess(list); // pass the list
}
// If failed
@Override
public void onFailure(Call<ActivitiesResponse>call, Throwable t) {
// Log error here since request failed
Log.e(TAG, t.toString());
}
});
}

public interface ApiCallback{
void onSuccess(ArrayList<YOURTYPE> result);
}

onResume() 中的用法示例,基本上你可以在任何你想要的地方执行此操作:

public void onResume(){
super.onResume();
doRequest(new ApiCallback(){
@Override
public void onSuccess(ArrayList<YOURTYPE> result){
//do stuff here with the list from the request
}
});
}

请告诉我这是否符合您的需求

关于android - 如何在 OnResponse 函数之外使用 Retrofit 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44042582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com