2017-02-21 4 views
0

私はsqlbrite、rxjavaの使用を初めています。だから、UIスレッドでコードを実行する必要があります(具体的には、更新されたdb SELECTクエリから取得したcoursorのマップ上にマーカーを追加する必要があります)。ここでSqlBriteはAndroidSchedulers.mainThread()を使用できません

は私の出発の設定です:私はこのようにしたいとき

sqlBrite = new SqlBrite.Builder().build(); 
resolver = sqlBrite.wrapContentProvider(mContentResolver, Schedulers.io()); 
Observable<SqlBrite.Query> query = resolver.createQuery(SmogContract.MeasurementEntry.CONTENT_URI, null, null, null, null, true); 

は、しかし:

query.observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<SqlBrite.Query>() { 
       @Override 
       public void onCompleted() { 

       } 

       @Override 
       public void onError(Throwable e) { 

       } 

       @Override 
       public void onNext(SqlBrite.Query query) { 
         ////add marker on a map from updated cursor select for latlng which I have in db 
         /// db is updated in some intervals from API 
       } 
      }); 

それは私にAndroidSchedulers.mainThread方法でエラーを与える:

observeOn (Rx.Scheduler) in Observable cannot be applied to io.reactivex.Scheduler 

私のグラデルでは、これはsqlbrite、rxjavaに関連しています:

compile 'com.squareup.sqlbrite:sqlbrite:1.1.1' 
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' 
compile 'io.reactivex.rxjava2:rxjava:2.0.1' 

そしてretrolambda。 正しく設定するには? rxandroidとrxjavaがなければ、私はAndroidSchedulers.mainThread()を使用することができません。

答えて

1

RxJava2を使用していますが、SQLBriteはRxJava1に依存しています。 RxJava2は別のライブラリ(下位互換性のない書き換え)であるため、プロジェクトには両方のバージョンが含まれています。私はio.reactivex.schedulers(RxJava2から)の質問がRxJava1 Observable、つまりobserveOnrx.schedulersのスケジューラが必要なものをインポートしたと思います。だから、

+0

に追加しますこれには、RxJava1の観測値(SQLBriteが返す)からinteropライブラリで観測可能なRxJava2に行くことができます:https://github.com/akarnokd/RxJava2Interop – Anstrong

0

、誰もが興味があるかどう - 今では、この設定で私の作品:

のGradle:

compile 'com.squareup.sqlbrite:sqlbrite:1.1.1' 
compile 'io.reactivex:rxandroid:1.2.1' 

と私の活動の輸入:

import rx.Observable; 
import rx.Subscriber; 
import rx.android.schedulers.AndroidSchedulers; 
import rx.schedulers.Schedulers; 
関連する問題