我对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));
答案 0 :(得分:1)
我会用subscribeOn(Schedulers.io())替换第一个observeOn调用,以便在后台线程中执行查询操作。 Map运算符仍将在后台线程中执行操作,之后,您可以使用observeOn更改以更新适配器。我认为这是实现这一目标的唯一方法。