我对rxAndroid/rxJava还是比较陌生的,所以如果我做的每件事都是正确的,我就会遇到一些麻烦。
我使用SqlBrite用游标返回的行更新RecyclerView。当对表执行db操作时,下面的可观察对象负责重新查询数据。我想返回一个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));发布于 2016-01-28 20:06:04
我将第一个observeOn调用替换为subscribeOn(Schedulers.io()),以便在后台线程中执行查询操作。Map操作符仍将在后台线程中执行该操作,在此之后,您可以使用observeOn进行更改以更新适配器。我认为这是唯一的方法。
https://stackoverflow.com/questions/35043962
复制相似问题