Android &引用;改装api调用时出错“;完成可观察项,而不是让其他可观察项发出
我有两个可观察的列表,一个从Android &引用;改装api调用时出错“;完成可观察项,而不是让其他可观察项发出,android,sharedpreferences,retrofit,rx-java,rx-android,Android,Sharedpreferences,Retrofit,Rx Java,Rx Android,我有两个可观察的列表,一个从SharedReferences获取列表,另一个从api(1.9.0版)获取。我使用mergeDelayError让两个观察对象即使在发生任何错误后也能发出它们的项 Observable.mergeDelayError(Observable.just(instance.getListFromSharedPrefs()), instance.getListFromApi()) .observeOn(AndroidSchedulers.ma
SharedReferences
获取列表,另一个从api(1.9.0版)获取。我使用mergeDelayError
让两个观察对象即使在发生任何错误后也能发出它们的项
Observable.mergeDelayError(Observable.just(instance.getListFromSharedPrefs()), instance.getListFromApi())
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.newThread())
.subscribe(new Observer<List<Item>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.d("ItemList", "Error: " + e.toString());
}
@Override
public void onNext(List<Item> Items) {
Log.d("ItemList", "ItemsFetched:" + Items.toString());
if (mAdapter != null) {
mAdapter.setItems(Items);
}
}
});
但当我关闭并重新打开应用程序时,一切正常:
12-30 15:51:27.396 12197-12197/com.me.android D/itemList: SharedPrefsandroid.app.SharedPreferencesImpl@9b59793
12-30 15:51:27.426 12197-12197/com.me.android D/itemList: itemsFetched:[com.me.android.model.entity.item.item@676ffe9]
12-30 15:51:27.438 12197-12197/com.me.android D/itemList: SharedPrefsandroid.app.SharedPreferencesImpl@9b59793
12-30 15:51:27.618 12197-12197/com.me.android D/itemList: SharedPrefsandroid.app.SharedPreferencesImpl@9b59793
12-30 15:51:27.700 12197-12197/com.me.android D/itemList: SharedPrefsandroid.app.SharedPreferencesImpl@9b59793
12-30 15:51:27.772 12197-12197/com.me.android D/itemList: Error: retrofit.RetrofitError
mergeDelayError
不会删除错误,它只是将其延迟到其他可观察对象完成发射项目时
您可能想尝试使用onerrorrurn
例如:
instance.getListFromSharedPrefs().mergeWith(instance.getListFromApi().onErrorReturn(Observable.empty())
忽略API调用中的网络。问题很可能是
observeOn
,它让我们在任何值之前剪切一个错误,而不管mergeDelayError
在值之后延迟错误
有一个PR正在等待批准,它允许observeOn
也延迟错误,但现在,您可以在observeOn
之前应用物化
,然后再应用非物化
编辑示例:
Observable.mergeDelayError(
Observable.just(
instance.getListFromSharedPrefs()), instance.getListFromApi())
.materialize()
.observeOn(AndroidSchedulers.mainThread())
.dematerialize()
.subscribeOn(Schedulers.newThread())
.subscribe(...);
但我也希望处理这些错误,而不是忽略它们。@MortezaRastgoo如果改型API调用中出现错误,您希望发生什么?onComplete方法是在onError之后调用的,因此,即使有我不知道的事情,也不会从
getListFromSharedPrefs
发出任何消息!请你再解释一下第二段好吗?它起作用了!但我不明白这里发生了什么。你能解释一下这个过程吗?
Observable.mergeDelayError(
Observable.just(
instance.getListFromSharedPrefs()), instance.getListFromApi())
.materialize()
.observeOn(AndroidSchedulers.mainThread())
.dematerialize()
.subscribeOn(Schedulers.newThread())
.subscribe(...);