我构造了MVVM,并通过Retrofit 2从Network获取数据。获取数据的流程如下: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中不起作用?我认为存在一些线程或lyfecycle问题,但无法弄清楚到底是什么。
另外,请注意,在获取数据时,我尝试在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();
}