我对rxAndroid/rxJava还有些陌生,所以我在解决这个问题以及我是否正确地做所有事情时遇到了一些麻烦。
我正在使用 SqlBrite 使用从游标返回的行更新回收器视图。当对表执行 db 操作时,下面的可观察量负责重新查询数据。我想返回一个 CursorWrapper (ChecklistCursor),但想确保我在工作线程上运行 select * 查询。清单回收器适配器订阅 ChecklistCursor 可观察量,并负责管理游标。
下面的代码似乎是我能够让 query.run() 在工作线程上运行并在主线程上返回订阅的唯一方法。
我想它有效,但我不相信这是这样做的标准方法。谁能提供比使用两次观察更好的方法?
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调用,以便在后台线程中执行查询操作。地图操作员仍将在后台线程中执行该操作,之后,您可以使用 observeOn 进行更改以更新您的适配器。我认为这是做到这一点的唯一方法。