安卓:没有LiveData,如何使用从Room到Retrofit发送数据?

问题描述 投票:0回答:1

我的情况是,我正试图获取一个字符串列表。List<String> 从我的Room数据库中获取数据,并将其发送给Retrofit来检索信息。

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

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

android android-room android-livedata kotlin-coroutines
1个回答
1
投票

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

你可以将你的观察者定义为顶层类,而不是嵌套它们。您可以将其定义为与使用它们的类在同一文件中的私有类,也可以将其定义为单独文件中的公共类。如果你关注的是一个过于复杂的、深嵌套的、长的源文件,这是一个很好的解决方案。如果有必要,它可以让你更容易地共享代码。

例如,如果你的视图中有以下观察者。

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 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 或推出自己的线程实现。

© www.soinside.com 2019 - 2024. All rights reserved.