Наблюдаемые не вызывают onComplete (sqlbrite - mapToOneOrDefault) - PullRequest
0 голосов
/ 16 февраля 2019

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

    Observable.fromIterable (0..6) .flatMap {db.selectDayTimelineRecords (timestampOfDayInWeek (it))} .buffer (7) .subscribeOn (Schedulers.io ()). Наблюдать за (AndroidSchedulers.mainThread ()).subscribe {}

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

    Observable.fromIterable (0..6) .concatMap {db.selectDayTimelineRecords.Наблюдаемый со списком T ...

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

1 Ответ

0 голосов
/ 17 февраля 2019

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

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

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

...