Observable 不调用 onComplete (sqlbrite - mapToOneOrDefault)
Observable do not call onComplete (sqlbrite - mapToOneOrDefault)
我有 select 来自 sqlbrite 数据库,但由于某种原因,observable 没有调用 onComplete。
我的代码:
fun BriteDatabase.selectDayTimelineRecord(dayTimestamp: Long) =
createQuery(table_timeline, selectWDayRecords(dayTimestamp)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.mapToOneOrDefault(StatItem(dayTimestamp, 0)) { cursor -> cursor.mapTimelineStat() }
然后我尝试变体:
工作但我需要保持秩序所以我不能使用 flatmap
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 列表的 Observable...
有人知道我做错了什么吗?
我对 SQLBrite 不是很熟悉,但 createQuery
应该会不断通知数据库更改。如果你只想获得一次价值,那么你可以使用 take()
运算符。
fun BriteDatabase.selectDayTimelineRecord(dayTimestamp: Long) =
createQuery(table_timeline, selectWDayRecords(dayTimestamp))
.mapToOneOrDefault(StatItem(dayTimestamp, 0)) { cursor -> cursor.mapTimelineStat() }
.take(1)
然后您的 concatMap
实施将起作用。
我有 select 来自 sqlbrite 数据库,但由于某种原因,observable 没有调用 onComplete。
我的代码:
fun BriteDatabase.selectDayTimelineRecord(dayTimestamp: Long) =
createQuery(table_timeline, selectWDayRecords(dayTimestamp)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.mapToOneOrDefault(StatItem(dayTimestamp, 0)) { cursor -> cursor.mapTimelineStat() }
然后我尝试变体:
工作但我需要保持秩序所以我不能使用 flatmap
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 列表的 Observable...
有人知道我做错了什么吗?
我对 SQLBrite 不是很熟悉,但 createQuery
应该会不断通知数据库更改。如果你只想获得一次价值,那么你可以使用 take()
运算符。
fun BriteDatabase.selectDayTimelineRecord(dayTimestamp: Long) =
createQuery(table_timeline, selectWDayRecords(dayTimestamp))
.mapToOneOrDefault(StatItem(dayTimestamp, 0)) { cursor -> cursor.mapTimelineStat() }
.take(1)
然后您的 concatMap
实施将起作用。