有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么在从ViewModel调用时,改型排队不起作用?

我构建了MVVM,并通过改造2从网络中获取数据。获取数据流如下所示:MainActivity->;视图模型->;存储库->;蜜蜂服务。因此,我从存储库中调用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回调打印它时,它确实起作用。这里有什么问题


共 (1) 个答案

  1. # 1 楼答案

    尝试更改ViewModel以返回articleRepository。getArticles()

    public List<Result> getArticleList() {
        Log.d(TAG, "getArticleList");
        articleRepository = new ArticleRepository();
        return articleRepository.getArticles();
    }