我在我的Android应用程序中使用RxJava适配器设置Retrofit。问题是我得到了一些报告,在某些设备中,Retrofit正在触发ConnectionException
,而在其他一些设备中正在触发UnknownHostException
。这很难使用rx.Observables
方法插入其他onErrorResume()
。更糟糕的是,两个异常共享的唯一共同父级是IOException
,这是非常通用的。有一种方法可以统一这个吗?
我只处理UnknownHostException
案件。但现在我也有了这个ConnectionException
,谁知道其他设备中还有哪个例外。
我可以将这两个例外映射到通用自定义异常,例如NoInternetConnectionException
。但是,还有更多这样的例外吗?
更新
目前我的Interactors / UseCases正在执行以下操作:
mNetworkUserRepository.getUserList()
.onErrorResule(ObservableUtils.whenExceptionIs(RetrofitError.class), mUserDatabase.getUserList()) //Server side error
.onErrorResule(ObservableUtils.whenExceptionIs(UnknownHostException.class), mUserDatabase.getUserList()) //No internet
.onErrorResule(ObservableUtils.whenExceptionIs(ConnectionException.class), mUserDatabase.getUserList()) //ANOTHER EXCEPTION FOR THE SAME THING
.subscribe(new MySubscriber<List<Users>>() {
@Override
public void onNext(List<Users> response) {
callback.showOnUI(response);
}
});
所以基本上在三星S7中,UnkownHostException被触发,在另一个设备中,Nexus正在触发ConnectionException。我不喜欢这个,有多少其他&#34;没有互联网&#34;有例外吗?我想,如果我试图在没有互联网连接的情况下发出http请求,那么Retrofit只会触发UnknownHostException。我怎么组这个?我不想为不同的设备和东西附加N onResumeErrors
答案 0 :(得分:0)
您实际上无法从异常中了解是否没有互联网,或者您遇到的其他一些网络错误,您可能会遇到许多其他情况和例外情况
SocketTimeoutException
,UnknowHostException
或从Exception
派生的任何其他网络IOException
(您可以看到来自IOException的数十个派生类),它可能会也可能不会与互联网无关,因为网络运营可能会在不同来源的很多阶段失败,尤其是在移动网络上时。
所以,我认为如果你真的需要'没有互联网'的行为,你应该在请求之前check it并采取不同的行动。
当您执行呼叫时,我认为有两种类型的失败需要考虑,IOException
可能会发生任何网络错误。 (无论你的情况如何重试/使用缓存都不多),以及改装错误(HttpException
),这意味着你得到了服务器的响应(没有网络错误)但是请求本身有问题(你可以有您可能采取行动的大量错误原因 - 身份验证错误(令牌),授权等。)