问题在于全局变量" 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;
}
}
注意 - &gt;&gt; &#34; Log.d(&#34; DogRESTSuccessful&#34;,&#34;&#34; + response.body()。getDogs())&#34;和#34; Log.d(&#34; dogsReceived - &gt;&#34;,&#34;&#34; + responseDogs)&#34;显示填充的responseDogs ......
但retrieveDogsFromREST返回空列表,&#34; Log.d(&#34; onRetrieveDR&#34;,&#34;&#34; + responseDogs)&#34;
也许我写错了逻辑? IDK
答案 0 :(得分:2)
你的逻辑中有一个简单的误解。发出请求的线程是异步,这意味着它最终将在您的应用程序运行时执行。即使您的请求很快,它也总是返回null,因为线程没有时间更新它。
我的建议是,一旦 onResponse 被调用 通知 Observer pattern 系统并触发更新您需要更新的视图的事件。
通常人们最终会做这样的事情post
答案 1 :(得分:-1)
您确定您收到的响应正文与模型类中的结构完全相同吗?您的JSON可以有一个包含responseDogs
列表的高级对象吗?我问这是因为在没有提供JSON响应样本的情况下很难想到这个案例。