RxJava 如何在旧版本的主线程上观察?我无权访问 AndroidSchedulers.mainThread()
Posted
技术标签:
【中文标题】RxJava 如何在旧版本的主线程上观察?我无权访问 AndroidSchedulers.mainThread()【英文标题】:RxJava how to observe on mainThread in older versions? I dont have access to 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()
【参考方案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
以上是关于RxJava 如何在旧版本的主线程上观察?我无权访问 AndroidSchedulers.mainThread()的主要内容,如果未能解决你的问题,请参考以下文章