gpt4 book ai didi

android - RxJava Android AmbWith 运算符导致 NetworkOnMainThread 异常

转载 作者:行者123 更新时间:2023-11-29 15:45:50 28 4
gpt4 key购买 nike

我目前正在 Android 上试验 RxJava,在尝试将 AmbWith 运算符与两个 Observable 一起使用时遇到了问题。

正如我在此处的 amb 定义中所理解的 http://reactivex.io/documentation/operators/amb.html

只有第一个发送通知的 Observable 被接受,其余的被忽略和丢弃。

我连接了两个 Observable,一个进行网络调用(带有改造)另一个用内存中的数据响应。

代码如下:

    retrofitService.loadInfo()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
//the observable here returns an item from in memory and should be observed on the ui thread
.ambWith(observable.subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()))
.subscribe(action);

现在的问题是,如果第二个 observable 首先发出一个项目(这很可能)第一个 observable 被取消。如果网络服务已经启动,这会导致 NetworkOnMainThread。

如果我删除

它工作正常
    .observeOn(AndroidSchedulers.mainThread()

对于第二个 Observable,但我需要在 ui 中显示结果。

我的猜测是,amb 运算符在主线程上执行,而取消操作以某种方式在主线程中结束。

我错过了什么吗?有人知道如何解决这个问题吗?

感谢任何帮助。

最佳答案

您的 observeOn 仅影响原始 Observable,因此,我认为这可能会有所帮助:

retrofitService.loadInfo()
.subscribeOn(Schedulers.newThread())
.ambWith(observable.subscribeOn(Schedulers.newThread()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(action);

现在,所有结果都将在主线程中。检查一下。

关于android - RxJava Android AmbWith 运算符导致 NetworkOnMainThread 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33435862/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com