首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Room Flowable在插入时不会发出数据

Room Flowable在插入时不会发出数据
EN

Stack Overflow用户
提问于 2017-12-26 17:54:49
回答 1查看 1.9K关注 0票数 2

我很难理解Flowable在房间中是如何工作的。我有这样的Dao方法

代码语言:javascript
复制
@Insert(onConflict = OnConflictStrategy.REPLACE)
void upsert(List<Site> sites);

@Query("SELECT * FROM site ORDER BY distance ASC")
Flowable<List<Site>> getSites();

我希望每当我调用upsert subscriber时,由getSites()返回的Flowable对象都会被调用。我的假设是真的吗?

这就是我是如何描述这个可流动的

代码语言:javascript
复制
private final Flowable<List<Site>> siteFlowable;
ApiService apiService;
FuelDatabase database;

@Override
public void getSites(boolean showOnlyKeySites) {
    // add sites from cache first, then fetch network -> update cache -> update ui
    disposable = siteFlowable.flatMap(Flowable::fromIterable)
        .filter(site -> site.isValid())
        .buffer(100, TimeUnit.MILLISECONDS, 20)
        .takeUntil(sites -> sites.size() == 0)
        .observeOn(AndroidSchedulers.mainThread())
        .doOnNext(mapView::addPins)
        .subscribe(sites -> {
            Timber.d("Flowable emitted %d items", sites.size());
        }, Timber::e);

    apiService.getSites()
        .map(SiteListResponse::getData)
        .flatMap(Observable::fromIterable)
        .filter(Site::isValidSite)
        .toList().toObservable()
        .subscribe(sites -> {
            Timber.i("Success Fetching %d sites", sites.size());
            database.siteDao().clear();
            database.siteDao().upsert(sites);
        }, throwable -> Timber.e(throwable, "Error fetching sites"));
}

在调用upsert()之后,不会调用此可流动对象。API正在返回有效数据,并且正在将数据输入数据库。

EN

回答 1

Stack Overflow用户

发布于 2017-12-26 18:35:58

试试这个:

代码语言:javascript
复制
apiService.getSites()
    .map(SiteListResponse::getData)
    .flatMap(result -> 
         Observable.fromIterable(result)
        .filter(Site::isValidSite)
        .toList()
        .toFlowable()
    )
    .subscribe(sites -> {
        Timber.i("Success Fetching %d sites", sites.size());
        database.siteDao().clear();
        database.siteDao().upsert(sites);
    }, throwable -> Timber.e(throwable, "Error fetching sites"));
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47976737

复制
相关文章

相似问题

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