0

我是使用 sqlbrite、rxjava 的初学者。因此,我必须在 UI 线程上运行一些代码(具体来说,从更新的 db 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()。

4

2 回答 2

1

您正在使用 RxJava2,但 SQLBrite 依赖于 RxJava1。因为 RxJava2 是一个不同的库(重写不向后兼容),所以您的项目中包含了这两个版本。我怀疑您已经导入io.reactivex.schedulers(从 RxJava2),其中您的查询是 RxJava1 Observable,这observeOn需要来自rx.schedulers.

于 2017-02-21T13:06:45.900 回答
0

所以,如果有人有兴趣 - 现在它适用于我的设置:

毕业典礼:

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;
于 2017-02-21T14:24:20.440 回答