RxJava onErrorResumeNext和onError问题

时间:2018-01-31 09:53:07

标签: java android rx-java2

在我的应用程序中,我向服务器发出请求以获取一些数据。我通过改造和rxjava实现了它。此外,我通过Realm数据库进行数据缓存。如果发生错误,则从数据库加载数据 所以,关于这个问题。当我发出成功请求,然后发出错误请求(例如在我的设备上启用飞行模式)时,它会进入onErrorResumeNext,它处理错误并从缓存加载数据。但是,如果我在启用飞行模式的情况下启动应用程序,它将转到onError,这不应该发生,我的日志中包含此类字符串,

D/myLogs: Request error 2 exceptions occurred.  io.reactivex.exceptions.CompositeException: 2 exceptions occurred. 

以下是请求的代码

apiContent.getNews("Token " + myHelper.getAuthToken(getActivity()))
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .map(NewsObject::getResults)
            .flatMap(news -> {
                Realm.init(getContext());
                Realm.getDefaultInstance().executeTransaction(realm -> {
                    realm.delete(News.class);
                    realm.insert(news);
                    Log.d("myLogs", "Cached");
                });
                return Observable.just(news);
            })
            .onErrorResumeNext(throwable -> {
                Realm realm = Realm.getDefaultInstance();
                RealmResults<News> results = realm.where(News.class).findAll();
                ArrayList<News> dataNews = new ArrayList<News>();
                dataNews.addAll(realm.copyFromRealm(results));
                Log.d("myLogs", "Error, loading from cache");
                return Observable.just(dataNews);
            })
            .subscribe(new Observer<ArrayList<News>>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(ArrayList<News> newsObject) {
                    mAdapter.updateData(newsObject);
                    Log.d("myLogs", "Request started");
                }

                @Override
                public void onError(Throwable e) {
                    swipeRefreshLayout.setRefreshing(false);
                    Log.d("myLogs", "Request error " + e.getMessage() + " " + e.toString());
                }

                @Override
                public void onComplete() {
                    swipeRefreshLayout.setRefreshing(false);
                    Log.d("myLogs", "Request finished");
                }
            });

我需要以某种方式修复它,如果有人向我解释问题的原因,我也会感激。

问题解决了。我刚刚在请求调用之前替换了Realm.init(getContext());

0 个答案:

没有答案