2017-09-21 2 views
0

Je construis un projet en utilisant web3.RxJava comment observer sur mainThread dans des versions plus anciennes? Je n'ai pas accès à 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(); 
      }); 

Mais web3 utilise une ancienne version de RxJava et je ne peux pas accéder au mainThread d'observer à ce sujet (Pour mettre à jour des vues de texte, etc.)

Toutes les idées?

+1

'compiler 'io.reactivex: rxandroid: 1.2.1'' /* Parce que les versions RxAndroid sont rares, il est r */ /* dépend explicitement de la dernière version de RxJava pour les corrections de bugs et les nouvelles fonctionnalités. */ 'compile 'io.reactivex: rxjava: 1.1.6'' – EpicPandaForce

+0

c'est mon problème si ->' observeOn (rx .Scheduler) 'in' rx.Observable 'ne peut pas être appliqué à' (io.reactivex.Scheduler) ' – Gravychain

+0

Si vous ne pouvez pas ajouter la dépendance 'rxandroid' pour obtenir' AndroidSchedulers', alors vous devrez peut-être créer votre propre 'Scheduler '. Le planificateur de threads principal était juste un wrapper autour de 'handler.post (...)' de toute façon. – Jon

Répondre

1
compile 'io.reactivex:rxandroid:1.2.1' // <-- this is needed 
compile 'io.reactivex:rxjava:1.1.6' 

Ensuite, vous pouvez obtenir

dans 'rx.Observable' ne peut pas être appliqué à '(io.reactivex.Scheduler)'

Dans ce cas, faire

rx.android.AndroidSchedulers.mainThread() 
+0

Mais techniquement, vous pouvez également utiliser la bibliothèque RxJava2Interop pour convertir 'rx.Observable' en' io.reactivex.Observable' – EpicPandaForce