1

我对 rxAndroid/rxJava 还是有点陌生​​,所以我在思考这个问题以及我是否正确地做所有事情时遇到了一些麻烦。

我正在使用 SqlBrite 使用从游标返回的行来更新 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));
4

1 回答 1

1

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

于 2016-01-28T12:06:03.707 回答