相关疑难解决方法(0)

使用Kotlin扩展函数将RxJava Observable转换为实时数据

我一直在使用库在我的代码中使用很多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)

我的问题是:

  1. 这是一个好主意吗?
  2. 有没有更好的方法呢?
  3. 这些扩展功能可以更好吗?

PS

我是Kotlin的新手,所以我问这些问题.任何有用的东西将不胜感激.非常感谢你.

android kotlin rx-java2 android-livedata android-architecture-components

18
推荐指数
2
解决办法
6192
查看次数

在会议室中使用哪一个:LiveData或RxJava?

我正在使用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

6
推荐指数
1
解决办法
824
查看次数

Livedata与Rxjava

我必须花费大量时间在业务逻辑中学习和实现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

5
推荐指数
1
解决办法
1647
查看次数

架构组件改造和 RxJava 2 错误处理

我目前正在尝试使用来自改造和 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)

android retrofit2 rx-java2 android-architecture-components

4
推荐指数
1
解决办法
3089
查看次数

LiveData 与 Observable 数据对象

根据LiveData 文档,其中一项功能被设计为使用可观察模式通知数据更改。(除此之外,LiveData 还提供了许多其他有前途的功能)

另一方面,Observable data object基于其文档的数据库能够通知其他人其数据的变化。

结果,这两个功能看起来是相同的。

问题是:

LiveData与其他功能一起使用不是更好吗?

android-databinding android-livedata android-jetpack

4
推荐指数
1
解决办法
5202
查看次数