2017-09-21 67 views
0

Im建立一个项目使用web3。RxJava如何观察旧版本的mainThread?我没有访问AndroidSchedulers.mainThread()

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在其上观察(更新文本视图等)

任何想法?

+1

'compile'io.reactivex:rxandroid:1.2.1'' /*因为RxAndroid的版本很少,而且很少,所以它是r */ 'compile'io.reactivex:rxjava:1.1.6'' – EpicPandaForce

+0

这是我的问题,虽然 - >'observeOn(rx)*/ /*明确依赖于RxJava的最新版本的bug修复和新功能。 .scheduler)'in'rx.Observable''不能应用于'(io.reactivex.Scheduler)' – Gravychain

+0

如果你不能添加'rxandroid'依赖来获得'AndroidSchedulers',那么你可能不得不建立你自己的'Scheduler '。无论如何,主线程调度器只是'handler.post(...)'的一个包装器。 – Jon

回答

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() 
+0

但技术上你也可以使用RxJava2Interop库将'rx.Observable'转换为'io.reactivex.Observable' – EpicPandaForce