我构建了MVVM并通过Retrofit 2从网络获取数据。获取数据流程如下:MainActivity -> ViewModel -> Repository -> APiService。因此,我从存储库中调用 enqueu,如下所示:
public List<Result> getArticles() {
final List<Result>[] articles = new List[]{new ArrayList<>()};
Log.d(TAG, "getArticles");
ApiService.getService().getArticles("test", "thumbnail").enqueue(new Callback<Example>() {
@Override
public void onResponse(Call<Example> call, Response<Example> response) {
Log.d(TAG, "onResponse");
if (response.isSuccessful()) {
Log.d(TAG, "isSuccessful");
articles[0] = response.body().getResponse().getResults();
}
}
@Override
public void onFailure(Call<Example> call, Throwable t) {
Log.d(TAG, "onFailure");
}
});
return articles[0];
}
我从 ViewModel 中调用 getArticles,如下所示:
public List<Result> getArticleList() {
Log.d(TAG, "getArticleList");
articleRepository = new ArticleRepository();
articleRepository.getArticles();
return articleList;
}
但是,我的队列不起作用,我花了几个小时来找出原因,但仍然不能。我唯一注意到的是,当我不是从 ViewModel 而是从 MainActivity 进行调用时,排队确实有效! 谁能告诉我我在这里缺少什么?为什么同样的事情在 ViewModel 中不起作用?我认为存在一些线程或生命周期问题,但无法弄清楚到底是什么。
此外,注意到当我尝试在 MainActivity 中打印数据时,它不起作用:
for (Result article : articleList) {
Log.d(TAG, article.getSectionName());
}
但是当我从改造队列 onResponse 回调中打印它时,它确实有效。这里有什么问题吗?
最佳答案
尝试更改您的 ViewModel 以返回articleRepository.getArticles()
public List<Result> getArticleList() {
Log.d(TAG, "getArticleList");
articleRepository = new ArticleRepository();
return articleRepository.getArticles();
}
关于java - 为什么从 ViewModel 进行调用时,Retrofit enqueue 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50886590/