Наблюдаемые не вызывают onComplete (sqlbrite - mapToOneOrDefault)

Я выбрал из базы данных sqlbrite, но наблюдаемые не вызывают 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. работает, но мне нужно поддерживать порядок, поэтому я не могу использовать flatmap

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

  2. не работает (не результат доставки, но я не знаю почему)

    Observable.fromIterable (0..6).concatMap {db.selectDayTimelineRecords (timestampOfDayInWeek (it))}.buffer (7).subscribeOn (Schedulers.io ()). Наблюдаем (AndroidSchedulers.mainThread ()). Subscribe {}

В результате я хочу Observable со списком T...

Кто-нибудь знает, что я делаю не так?

1 ответ

Решение

Я не очень знаком с SQLBrite, но createQuery должен постоянно уведомлять об изменениях в базе данных. Если вы хотите получить значение только один раз, вы можете использовать take() оператор.

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

Тогда ваш concatMap реализация будет работать.

Другие вопросы по тегам