2017-02-21 14 views
0

Я начинаю использовать sqlbrite, rxjava. Итак, я должен запустить некоторый код в потоке пользовательского интерфейса (для конкретного добавить некоторые маркеры на карте из курсора, который у меня есть из обновленного запроса SELECT SELECT).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, то есть observeOn нужен планер от rx.schedulers.

+0

добавить на к этому вы можете перейти от наблюдаемого RxJava1 (который возвращает SQLBrite) к RxJava2, наблюдаемому с помощью библиотеки interop: 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; 
Смежные вопросы