Наблюдаемые не вызывают 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() }
и тогда я пробую варианты:
работает, но мне нужно поддерживать порядок, поэтому я не могу использовать flatmap
Observable.fromIterable (0..6).flatMap {db.selectDayTimelineRecords (timestampOfDayInWeek (it))}.buffer (7).subscribeOn (Schedulers.io ()). FollowOn(AndroidSchedulers.mainThread()). Subscribe {}
не работает (не результат доставки, но я не знаю почему)
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
реализация будет работать.