我的情况是,我正试图获取一个字符串列表。List<String>
从我的Room数据库中获取数据,并将其发送给Retrofit来检索信息。
我不想使用LiveData,因为我需要在View中设置一个嵌套的观察者来观察数据库中的数据,而另一个观察者则从Retrofit获取数据列表。
我正在尝试使用coroutines,但不确定当viewModelScope.launch函数最终完成获取值时,如何从它返回数据。
我不想使用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
或推出自己的线程实现。