我已经从sqlbrite db中进行选择,但是由于某种原因,可以观察到不要调用onComplete。
我的代码:
fun BriteDatabase.selectDayTimelineRecord(dayTimestamp: Long) =
createQuery(table_timeline, selectWDayRecords(dayTimestamp)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.mapToOneOrDefault(StatItem(dayTimestamp, 0)) { cursor -> cursor.mapTimelineStat() }
然后我尝试变体:
正在工作,但是我需要保持秩序,所以我不能使用平面图
Observable.fromIterable(0..6).flatMap { db.selectDayTimelineRecords(timestampOfDayInWeek(it)) } .buffer(7).subscribeOn(Schedulers.io())。observeOn(AndroidSchedulers.mainThread())。subscribe {}
不起作用(无法交付结果,但我不知道为什么)
Observable.fromIterable(0..6).concatMap { db.selectDayTimelineRecords(timestampOfDayInWeek(it)) } .buffer(7).subscribeOn(Schedulers.io())。observeOn(AndroidSchedulers.mainThread())。subscribe {}
结果,我希望通过T ...的列表可以观察到
有人知道我在做什么错吗?
答案 0 :(得分:1)
我对SQLBrite不太熟悉,但是createQuery
应该一直在通知数据库更改。如果您只想获得价值,那么可以使用take()
运算符。
fun BriteDatabase.selectDayTimelineRecord(dayTimestamp: Long) =
createQuery(table_timeline, selectWDayRecords(dayTimestamp))
.mapToOneOrDefault(StatItem(dayTimestamp, 0)) { cursor -> cursor.mapTimelineStat() }
.take(1)
然后您的concatMap
实现将起作用。