我构建了MVVM并通过Retrofit 2从Network获取数据。获取数据流如下所示:MainActivity - > ViewModel - >存储库 - > 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,enqueue确实有效! 谁能说出我在这里失踪了什么?为什么同样的事情不适用于ViewModel?我认为有一些线程或lyfecycle问题,但无法弄清楚究竟是什么。
另外,注意到在获取数据时我尝试在MainActivity中打印,但它不起作用:
for (Result article : articleList) {
Log.d(TAG, article.getSectionName());
}
但是,当我从改装排队onResponse回调打印它确实有效。这有什么问题?
答案 0 :(得分:2)
尝试更改ViewModel以返回articleRepository.getArticles()
public List<Result> getArticleList() {
Log.d(TAG, "getArticleList");
articleRepository = new ArticleRepository();
return articleRepository.getArticles();
}