0

我已经从 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() }

然后我尝试变体:

  1. 工作,但我需要保持秩序,所以我不能使用平面地图

    Observable.fromIterable(0..6).flatMap{ db.selectDayTimelineRecords(timestampOfDayInWeek(it)) }.buffer(7).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe {}

  2. 不工作(没有交付结果,但我不知道为什么)

    Observable.fromIterable(0..6).concatMap{ db.selectDayTimelineRecords(timestampOfDayInWeek(it)) }.buffer(7).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe {}

结果我想要带有 T 列表的 Observable...

有人知道我在做什么错吗?

4

1 回答 1

1

我对 SQLBrite 不是很熟悉,但createQuery应该不断通知数据库更改。如果您只想获得一次价值,那么您可以使用take()运算符。

fun BriteDatabase.selectDayTimelineRecord(dayTimestamp: Long) =
    createQuery(table_timeline, selectWDayRecords(dayTimestamp))
        .mapToOneOrDefault(StatItem(dayTimestamp, 0)) { cursor -> cursor.mapTimelineStat() }
        .take(1)

然后您的concatMap实施将起作用。

于 2019-02-17T05:19:42.647 回答