工作线程上的SqlBrite查询

时间:2016-01-27 17:20:38

标签: android rx-android sqlbrite

我对rxAndroid / rxJava还是有些新手,所以如果我能正确地做好每一件事,我就会有点麻烦。

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

下面的代码似乎是我能够在工作线程上运行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));

1 个答案:

答案 0 :(得分:1)

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