2017-02-21 1 views
0

Ich bin Anfänger in der Verwendung von sqlbrite, rxjava. Also, ich muss etwas Code auf einem UI-Thread ausführen (um genau einige Markierungen auf der Karte von einem Cursor hinzuzufügen, den ich von der aktualisierten db SELECT-Abfrage habe). Es gibt mir einen Fehler mit AndroidSchedulers.mainThread MethodeSqlBrite kann AndroidSchedulers.mainThread() nicht verwenden

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 
       } 
      }); 

:

Hier ist mein Setup starten:

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); 

Jedoch, wenn ich dies machen wollen

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

In meiner Größe habe ich dies in Verbindung mit 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' 

Und retroLambda. Wie man es richtig einrichtet? Ohne rxandroid und rxjava kann ich AndroidSchedulers.mainThread() nicht verwenden.

Antwort

1

Sie verwenden RxJava2, aber SQLBrite hängt von RxJava1 ab. Da RxJava2 eine andere Bibliothek ist (neu schreiben nicht abwärtskompatibel), haben Sie beide Versionen in Ihrem Projekt enthalten. Ich vermute, dass Sie io.reactivex.schedulers importiert haben (aus RxJava2), wo Ihre Abfrage ein RxJava1 Observable ist, das observeOn einen Scheduler von rx.schedulers benötigt.

+0

auf hinzufügen Dazu können Sie von einem RxJava1 Observable (das SQLBrite zurückgibt) zu einem RxJava2 gehen, das mit der Interop-Bibliothek beobachtbar ist: https://github.com/akarnokd/RxJava2Interop – Anstrong

0

Also, wenn jemand interessiert sein - jetzt funktioniert es für mich mit diesem Setup:

gradle:

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

und die Importe in meiner Tätigkeit:

import rx.Observable; 
import rx.Subscriber; 
import rx.android.schedulers.AndroidSchedulers; 
import rx.schedulers.Schedulers;