【发布时间】:2018-06-16 09:22:10
【问题描述】:
我通过 Retrofit 2 构建了 MVVM 并从 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 中不起作用?我认为存在一些线程或生命周期问题,但无法弄清楚究竟是什么。
另外,注意到当我尝试在 MainActivity 中打印数据时,它不起作用:
for (Result article : articleList) {
Log.d(TAG, article.getSectionName());
}
但是当我从改造入队 onResponse 回调中打印它时,它确实有效。这里有什么问题?
【问题讨论】:
-
对不起,我的错,原因是小代码错误。我宁愿自己投反对票:D 但是,仍然没有从 MainActivity 记录该列表。
标签: java android kotlin retrofit2 android-lifecycle