Android 工作线程上的SqlBrite查询

Android 工作线程上的SqlBrite查询,android,rx-android,sqlbrite,Android,Rx Android,Sqlbrite,我对rxAndroid/rxJava还是有点陌生,所以我在思考这个问题时有点困难,如果我做的每件事都正确的话 我正在使用SqlBrite用游标返回的行更新RecyclerView。在表上执行db操作时,下面的observable负责重新查询数据。我想返回一个CursorWrapper(ChecklistCursor),但要确保我正在工作线程上运行select*查询。checklistRecyclerAdapter订阅可观察的ChecklistCursor,并负责管理光标 下面的代码似乎是我能够在

我对rxAndroid/rxJava还是有点陌生,所以我在思考这个问题时有点困难,如果我做的每件事都正确的话

我正在使用SqlBrite用游标返回的行更新RecyclerView。在表上执行db操作时,下面的observable负责重新查询数据。我想返回一个CursorWrapper(ChecklistCursor),但要确保我正在工作线程上运行select*查询。checklistRecyclerAdapter订阅可观察的ChecklistCursor,并负责管理光标

下面的代码似乎是我能够在工作线程上运行query.run()并在主线程上返回订阅的唯一方法

我想这是可行的,但我不相信这是标准的方法。有谁能提供比两次使用observeOn更好的方法吗

compositeSubscription.add(db.createQuery(Checklist.TABLE, Checklist.QUERY_ALL)
    .observeOn(Schedulers.newThread())
    .map(query -> new ChecklistCursor(query.run()))
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(checklistListRecyclerAdapter));

我将用subscribeOn(Schedulers.io())替换第一个observeOn调用,以便在后台线程中执行查询操作。Map操作符仍将在后台线程中执行该操作,之后,您可以使用observeOn进行更改以更新适配器。我认为这是唯一的办法

看起来执行建议的操作(将observeOn替换为subscribeOn(Schedulers.io))将在主线程中运行映射。