繁体   English   中英

Android:如何在没有 LiveData 的情况下使用从 Room 向 Retrofit 发送数据?

[英]Android: How can I use send data from Room to Retrofit without LiveData?

我的情况是我试图从我的 Room 数据库中获取字符串List<String>并将其发送到 Retrofit 以检索信息。

我不想使用 LiveData,因为我需要在视图中有一个嵌套的观察者来观察数据库中的数据,另一个来从 Retrofit 中获取数据列表。

我正在尝试使用协程,但不确定如何在最终完成获取值时从 viewModelScope.launch function 返回数据。

我不想使用 LiveData,因为我需要在视图中有一个嵌套的观察者来观察数据库中的数据,另一个来从 Retrofit 中获取数据列表。

您可以将观察者定义为顶级类,而不是嵌套它们。 您可以在与使用它们的 class 相同的文件中作为私有 class 执行此操作,也可以在单独文件中作为公共 class 执行此操作。 如果您关心的是一个过于复杂、嵌套深度、长的源文件,这是一个很好的解决方案。 如有必要,它将允许您更轻松地共享代码。

例如,如果您的视图中有以下观察者:

final Observer<String> nameObserver = new Observer<String>() {
    @Override
    public void onChanged(@Nullable final String newName) {
        // Update the UI, in this case, a TextView.
        nameTextView.setText(newName);
    }
};

然后创建一个名为 class:

class MyObserver extends Observer<String> {
    @Override
    public void onChanged(@Nullable final String newName) {
        // Update the UI, in this case, a TextView.
        nameTextView.setText(newName);
    }
}

然后在你看来:

final Observer<String> nameObserver = new MyObserver();

如果您坚持避免LiveData ,您可以使用AsyncTask做您想做的事情或滚动您自己的线程实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM