java - 为什么从 ViewModel 进行调用时,Retrofit enqueue 不起作用?

标签 java android kotlin retrofit2 android-lifecycle

我构建了MVVM并通过Retrofit 2从网络获取数据。获取数据流程如下: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 回调中打印它时,它确实有效。这里有什么问题吗?

最佳答案

尝试更改您的 ViewModel 以返回articleRepository.getArticles()

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

关于java - 为什么从 ViewModel 进行调用时,Retrofit enqueue 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50886590/

相关文章:

java - 为什么使用 BitSet 类和关联的 set 方法?

java - 从 api.facebook.com 解析 json

android - 在Android中使用kotlin下载文件并将其保存到下载文件夹

android - 如何使用kotlin从android中的 Assets 文件夹复制数据库

android - Kotlin 插件导致 Android Studio 崩溃

java - 编写基于 Java 的 Web 应用程序并在我的个人计算机上测试它们需要什么?

java - 什么可能导致此异常?

android - fragment 中的 OnClick 而不会创建大量的 onclicklisteners

java - 如何以编程方式将布局集成到静态布局(.xml)中?

java - 在 ListView 中获取长按的内容