- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下情况:我需要从数据库获取数据。当我尝试进入 UI 线程时(这是我的做法):
List<Movie> movies = new ArrayList<>();
for (MovieEntity movie:movieDao.getFavorites()){
movies.add(getMovie(movie));
}
mView.onMoviesLoaded(movies);
一切正常
但是当我在 rx 中执行此操作时:
mCompositeDisposable.add(movieDao.getFavorites()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(disposable -> mView.showLoadingIndicator(true))
.doOnError(throwable -> {
mView.showLoadingIndicator(false);
mView.showEmptyState(true);
})
.doOnTerminate(() -> mView.showLoadingIndicator(false))
.doOnComplete(()->mView.showLoadingIndicator(false))
.flatMapIterable(listObservable -> listObservable)
.map(this::getMovie)
.toList()
.subscribe(list -> {
if (list.isEmpty()) {
mView.showEmptyState(true);
} else {
mView.onMoviesLoaded(list);
}
})
);
我一直有加载指示器。我无法理解为什么会发生这种情况,因为我为所有情况(错误和成功情况)添加了 showLoadingIndicator(false)
。那么,为什么它没有移走并且没有显示数据?
最佳答案
movieDao.getFavorites()
是无限的流。使用.toList()
在无限流上没有意义,因为 .toList()
在源流完成之前不会发出。
有两个选项:
制造movieDao.getFavorites()
返回 Single<List<MovieEntity>>
而不是Observable<List<MovieEntity>>
或者简单地说.take(1)
在来源之后。
mCompositeDisposable.add(movieDao.getFavorites()
.take(1) // This will terminate the stream after it emits first item.
.subscribeOn(Schedulers.io())
...
.toList()
.保持无限流并继续监听数据库更改。
mCompositeDisposable.add(movieDao.getFavorites()
.map(movieEntities -> movieEntities.stream().map(this::getMovie).collect(Collectors.toList()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(list -> {
if (list.isEmpty()) {
mView.showEmptyState(true);
} else {
mView.onMoviesLoaded(list);
}
})
);
关于java - 不调用方法 doOnComplete、doOnTerminate 或 doOnError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56569359/
我有这样的东西: service.getStuff() .map(...) .observeOn(AndroidSchedule
正如您从下面的代码中看到的,我正在尝试测试在我的存储库中发生的 doOnComplete() 调用的行为。但是,当我模拟客户端的注入(inject)依赖项时,我使用 Observable.just()
在这段代码中: Rx.Observable.range(0,8) .doOnCompleted(() => console.log("range complete")) .take(1
我是 RxScala Observables 的新手,在组合使用 take(n) 和 doOnCompleted() 时遇到奇怪的行为。 下面我有一个测试示例,我相信第一个订阅是正确的(开头为 tak
我有以下情况:我需要从数据库获取数据。当我尝试进入 UI 线程时(这是我的做法): List movies = new ArrayList<>(); for (MovieEntity movie:mo
我是 RX Java 的新手,我有一个问题。我有一个 completable 并且想在获得一个值并在 emmition 的一个步骤中执行一些操作后继续我的操作。 if (mIsCopy) {
我尝试从服务器获取一些数据。 Observable> backendObservable = mCountriesApi.getCountries() .subscribeOn
我正在学习 RxAndroid,并从我项目中的一个非常简单的示例开始。即获取可观察的用户个人资料图片 URL 响应。 下面是获取字符串 URL 值的代码,我使用 Picasso 加载图像 URL。当我
我有一个 Completable observable,我正在使用 doOnComplete() 运算符来更新我的事件。但是,当我使用 setValue 更新实时数据时,用 postValue 替换对
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 4 年前。 Improve
我是一名优秀的程序员,十分优秀!