在我的应用程序中,我向服务器发出请求以获取一些数据。我通过改造和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());
。