[英]Retrofit2 + RxJava2 Global handling errors
如何使用Retrofit2和rxjava2檢查網絡連接以及服務器是否可用於所有請求?
我可以通過向服務器網址發送請求來檢查“服務器可用”,但是我可以通過向google.com或另一個“良好”網站發送請求來檢查網絡連接嗎?
我有更多的api請求,例如其中之一:
compositeDisposable.add(RetrofitClient
.getApi()
.somemethod()
.map(response -> {
Data data = null;
if (response.isSuccessful()) {
data = response.body();
} else {
data = new Data();
data.setResponseCode(response.code())
}
return data;
})
.onErrorReturnItem(new Data())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::checkResponse());
為了不重復代碼,如何檢查所有請求的這些錯誤? 謝謝。
在應用程序類的onCreate
中調用RxJavaPlugins.setErrorHandler
。 例如:
RxJavaPlugins.setErrorHandler(e -> {
if ((e instanceof IOException) || (e instanceof SocketException)) {
// handle exception
return;
}
});
您可以使用lift
方法,該方法允許您為案例ApiErrorOperator
實現自己的運算符
並按如下所示使用它:
@Override
public @NonNull Observable<List<Category>> fetchCategories() {
return this.service
.categories()
.lift(apiErrorOperator())
.map(CategoriesEnvelope::categories)
.subscribeOn(Schedulers.io());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.