我构造了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();
}

10-05 20:23
查看更多