【问题标题】:RxJava how to observe on mainThread in older versions? I dont have access to AndroidSchedulers.mainThread()RxJava 如何在旧版本的主线程上观察?我无权访问 AndroidSchedulers.mainThread()
【发布时间】:2018-03-03 00:05:46
【问题描述】:

我正在使用 web3 构建一个项目。

web3j.ethGetBalance("0x2910543af39aba0cd09dbb2d50200b3e800a63d2", latestBlock)
            .observable()
            .subscribeOn(rx.schedulers.Schedulers.io())
            //This needs to be on the main thread!
            //But i only have access to rx.schedulers not AndroidSchedulers.mainThread()
            .observeOn(rx.schedulers.Schedulers.io())
            .subscribe(block -> {
                ethereumTV.setText(block.getBalance() + "");
            }, error -> {
                error.printStackTrace();
            });

但是 web3 使用的是旧版本的 RxJava,我无法访问 mainThread 来观察它(更新文本视图等)

有什么想法吗?

【问题讨论】:

  • compile 'io.reactivex:rxandroid:1.2.1' /* 因为 RxAndroid 版本很少而且相差甚远,所以建议您也/ /明确地依赖 RxJava 的最新版本来修复错误和新功能。* /compile 'io.reactivex:rxjava:1.1.6'
  • 这是我的问题 -> 'rx.Observable' 中的 'observeOn(rx.Scheduler)' 不能应用于 '(io.reactivex.Scheduler)'
  • 如果您无法添加rxandroid 依赖项来获取AndroidSchedulers,那么您可能必须构建自己的Scheduler。无论如何,主线程调度程序只是 handler.post(...) 的一个包装器。
  • 找出你的rx版本,看看有没有对应的rxandroid版本,包名一样
  • 你需要使用rx.android.AndroidSchedulers.mainThread()

标签: android rx-java web3


【解决方案1】:
compile 'io.reactivex:rxandroid:1.2.1' // <-- this is needed
compile 'io.reactivex:rxjava:1.1.6'

那么你就可以得到

在'rx.Observable'中不能应用到'(io.reactivex.Scheduler)'

在什么情况下做

rx.android.AndroidSchedulers.mainThread()

【讨论】:

  • 但从技术上讲,您也可以使用 RxJava2Interop 库将 rx.Observable 转换为 io.reactivex.Observable
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多