我刚开始使用sqlbrite,rxjava。因此,我必须在UI线程上运行一些代码(具体地说,在地图上添加一些来自coursor的标记,这些标记来自更新的数据库SELECT查询)。
这是我的启动设置:
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在我的gradle中,我有一个与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()。
发布于 2017-02-21 21:06:46
您使用的是RxJava2,但SQLBrite依赖于RxJava1。因为RxJava2是一个不同的库(重写而不是向后兼容),所以两个版本都包含在您的项目中。我怀疑您已经导入了io.reactivex.schedulers (从RxJava2),其中您的查询是一个RxJava1可观察对象,即observeOn需要一个来自rx.schedulers的调度器。
发布于 2017-02-21 22:24:20
所以,如果有人对此感兴趣--现在我可以使用下面的设置:
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;https://stackoverflow.com/questions/42365514
复制相似问题