问题是全局变量“responseDogs”在方法结束时返回为 null,但在 onResponse 方法中填充!?
代码:
public class DogREST {
private List<Dog> responseDogs;
//...
public List<Dog> retrieveDogsFromREST() {
final DogService dogService = DogService.serviceDog;
dogService.getDogs(AuthRequest.createAuthJsonString()).enqueue(new Callback<DogList>() {
@Override
public void onResponse(Call<DogList> call, Response<DogList> response) {
if (response.isSuccessful()) {
responseDogs = response.body().getDogs();
Log.d("DogRESTSuccessful", "" + response.body().getDogs());
Log.d("dogsReceived - >", "" + responseDogs);
} else {
Log.d("DogRESTNSuccessful", "- statusCode" + response.code());
}
}
@Override
public void onFailure(Call<DogList> call, Throwable t) {
//...
}
});
Log.d("onRetrieveDR", ""+ responseDogs);
return reponseDogs;
}
}
注意 ->> "Log.d("DogRESTSuccessful", ""+ response.body().getDogs())"和 "Log.d("dogsReceived ->", ""+ responseDogs)"显示已填充响应狗...
但是retrieveDogsFromREST返回空列表,“Log.d(”onRetrieveDR”, “”+ responseDogs)”也是如此
也许我写错了逻辑?不知道
最佳答案
你的逻辑有一个简单的误解。发出请求的线程是异步,这意味着它最终将在您的应用程序运行时执行。即使您的请求很快,它也总是返回 null,因为线程没有时间更新它。
我给你的建议是,制作一个 Observer pattern 一旦您的 onResponse 被调用,通知系统并触发更新 View 的事件需要更新。
通常人们最终会做这样的事情 post
关于java - Retrofit2 - 列表最终为空,即使在填充之后也是如此。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48170548/