【发布时间】:2020-07-07 17:23:10
【问题描述】:
我正在尝试使用 Reactive Streams 将 “Flowable” 转换为 “LiveData”。查阅了一堆文章,但我仍然没有掌握处理错误状态的概念。目前,我正处于学习 RxJava 的初级阶段。如果有人能详细解释我应该如何处理这个问题,那将非常有帮助。
Repository.java
public class Repository {
private static final String API_KEY = "";
private static final String TAG = "Repository class- ";
private MovieService _movieApi;
private MediatorLiveData<MovieJsonData> _movieList;
private static Repository _repositoryInstance;
public static Repository getInstance(){
if(_repositoryInstance == null){
return new Repository();
}
return _repositoryInstance;
}
private Repository(){
_movieApi = MovieClient.getTrendingMovieClient().create(MovieService.class);
_movieList = new MediatorLiveData<>();
}
public MediatorLiveData<MovieJsonData> fetchData(){
LiveData<MovieJsonData> _source = LiveDataReactiveStreams.fromPublisher(
_movieApi.getTrendingMovies(API_KEY)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(error -> Log.d(TAG, "fetchData: " + error.getMessage()))
);
_movieList.addSource(_source, new Observer<MovieJsonData>() {
@Override
public void onChanged(MovieJsonData movieJsonData) {
_movieList.setValue(movieJsonData);
}
});
return _movieList;
}}
错误堆栈跟踪:
D/Repository class-: fetchData: timeout
W/System.err:io.reactivex.exceptions.UndeliverableException: The exception could not be delivered to
the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to
begin with.
Caused by: java.lang.RuntimeException: LiveData does not handle errors. Errors from publishers should
be handled upstream and propagated as state
【问题讨论】:
标签: android rx-java2 android-livedata reactive-streams