我一直在使用库在我的代码中使用很多RxJava Observables转换.所以我想在RxJava Observable中添加一个扩展函数来轻松转换它们.LiveDataLiveDataReactiveStreams.fromPublisher()LiveData
这些是我的扩展功能:
fun <T> Flowable<T>.toLiveData() : LiveData<T> {
return LiveDataReactiveStreams.fromPublisher(this)
}
fun <T> Observable<T>.toLiveData(backPressureStrategy: BackpressureStrategy) : LiveData<T> {
return LiveDataReactiveStreams.fromPublisher(this.toFlowable(backPressureStrategy))
}
fun <T> Single<T>.toLiveData() : LiveData<T> {
return LiveDataReactiveStreams.fromPublisher(this.toFlowable())
}
fun <T> Maybe<T>.toLiveData() : LiveData<T> {
return LiveDataReactiveStreams.fromPublisher(this.toFlowable())
}
fun <T> Completable.toLiveData() : LiveData<T> {
return LiveDataReactiveStreams.fromPublisher(this.toFlowable())
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
PS
我是Kotlin的新手,所以我问这些问题.任何有用的东西将不胜感激.非常感谢你.
android kotlin rx-java2 android-livedata android-architecture-components
我正在使用Room进行数据库管理,而在处理实时数据时该使用什么却感到困惑。现在,要管理我正在使用的实时数据,我对此Flowable非常满意。我感到困惑的是,我也可以使用LiveData它来执行相同的操作。
为了提供一些背景信息,这是我查询数据和更新视图的方式。
addDisposable(userDao().getUsersFlowable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(users -> userAdapter.setUsers(users)));
Run Code Online (Sandbox Code Playgroud)
userDao().getUsersLiveData()
.observe(this, users -> {
userAdapter.setUsers(users)
})
Run Code Online (Sandbox Code Playgroud)
我不太熟悉LiveData,但是就我的研究而言,它是一个观察者模式,它也知道生命周期,这意味着我将停止通知UI是否未处于活动状态。就是说,正如您在我的Flowable代码中看到的那样,我将其添加到其中CompositeDisposable,并将在我的onDestroy()方法中进行处理。因此,我看不出为什么我应该使用LiveData什么时候可以用进行管理RxJava,因为为了方便起见,该操作有很多运算符。
所以我应该何时使用,LiveData以及何时RxJava使用Room。反映给定方案的答案非常受赞赏,但也欢迎其他用例。
我遵循了何时在Android中使用RxJava以及何时从Android Architectural Components中使用LiveData?,但范围太广,我无法具体回答我的情况
observer-pattern rx-java rx-java2 android-room android-livedata
我必须花费大量时间在业务逻辑中学习和实现Livedata(尤其是MediatorLivedata),因为它有助于添加来自各种来源的数据。它取得了成功,因为我可以将FCM,Network或RoomDatabase作为不同的源添加到MediatorLivedata中,并在ViewModel中进行观察。它实际上可以很好地扩展。但是,它仍然缺少强大的RxJava2实现,例如很好地链接请求,平面地图等。似乎RxJava主要用于业务逻辑,但是实际上,我看到很多公司将RxJava与带有附加功能/库的UI一起使用。实际上,这使LiveData与表示逻辑无关。所以我想知道LiveData在表示逻辑方面(在ViewModel中使用它)是否比RxJava更好/更干净。您对未来有何建议?
viewmodel rx-java2 android-livedata android-architecture-components android-jetpack
我目前正在尝试使用来自改造和 Okhttp 的 API 请求在架构组件中实现新的 ViewModel,一切正常,但我不知道如何将错误响应从改造传递到片段中的观察者,然后LiveDataReactiveStreams.fromPublisher上游传递给片段中的观察者。这是我到目前为止所拥有的:
public class ShowListViewModel extends AndroidViewModel {
private final ClientAdapter clientAdapter;
private LiveData<List<Show>> shows;
public ShowListViewModel(Application application) {
super(application);
clientAdapter = new ClientAdapter(getApplication().getApplicationContext());
loadShows();
}
public LiveData<List<Show>> getShows() {
if (shows == null) {
shows = new MutableLiveData<>();
}
return shows;
}
void loadShows() {
shows = LiveDataReactiveStreams.fromPublisher(Observable.fromIterable(ShowsUtil.loadsIds())
.subscribeOn(Schedulers.io())
.flatMap(clientAdapter::getShowWithNextEpisode)
.observeOn(Schedulers.computation())
.toSortedList(new ShowsUtil.ShowComparator())
.observeOn(AndroidSchedulers.mainThread())
.toFlowable());
}
Run Code Online (Sandbox Code Playgroud)
在片段中,我在 OnCreate 中使用以下内容设置了 viewModel:
ShowListViewModel model = ViewModelProviders.of(this).get(ShowListViewModel.class);
model.getShows().observe(this, shows -> {
if (shows == null || …Run Code Online (Sandbox Code Playgroud) rx-java2 ×4
android-architecture-components ×3
android ×2
android-room ×1
kotlin ×1
retrofit2 ×1
rx-java ×1
viewmodel ×1