首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可观察不要调用onComplete (sqlbrite - mapToOneOrDefault)

可观察不要调用onComplete (sqlbrite - mapToOneOrDefault)
EN

Stack Overflow用户
提问于 2019-02-16 16:05:11
回答 1查看 68关注 0票数 0

我已经从sqlbrite db中进行了选择,但是由于某种原因,请不要调用onComplete。

我的代码:

代码语言:javascript
复制
fun BriteDatabase.selectDayTimelineRecord(dayTimestamp: Long) =
createQuery(table_timeline, selectWDayRecords(dayTimestamp)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
        .mapToOneOrDefault(StatItem(dayTimestamp, 0)) { cursor -> cursor.mapTimelineStat() }

然后我尝试变体:

  1. 工作,但我需要保持秩序,所以我不能使用平面图 db.selectDayTimelineRecords(timestampOfDayInWeek(it)) }.buffer(7).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe { Observable.fromIterable(0..6).flatMap{
  2. 不工作(没有交货结果,但我不知道原因) db.selectDayTimelineRecords(timestampOfDayInWeek(it)) }.buffer(7).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe { Observable.fromIterable(0..6).concatMap{

所以我想用T表来观察.

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-17 05:19:42

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

代码语言:javascript
复制
fun BriteDatabase.selectDayTimelineRecord(dayTimestamp: Long) =
    createQuery(table_timeline, selectWDayRecords(dayTimestamp))
        .mapToOneOrDefault(StatItem(dayTimestamp, 0)) { cursor -> cursor.mapTimelineStat() }
        .take(1)

那么您的concatMap实现就可以工作了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54724983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档