I am trying to convert a "Flowable" to "LiveData" using Reactive Streams. Looked up a bunch of articles but I still haven't grasped the concept of handling error states. Currently, I am in the beginning phases of learning RxJava. It would be really helpful if someone can provide me with a detailed explanation on how I should handle this problem.
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;
}}
Error stack trace:
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