在我的安卓应用程序中,我正在使用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正在被发射。我不喜欢这样,还有多少其他“没有互联网”的例外呢?我认为,只有当我试图在没有互联网连接的情况下提出http请求时,Retrofit才会解雇UnknownHostException。我怎么能把这个分类呢?我不想为不同的设备附加N个onResumeErrors
发布于 2017-05-25 08:43:21
您实际上无法从一个异常中知道是否没有internet,或者在此过程中发生了一些其他网络错误,正如您所遇到的,还有许多其他的情况和异常,比如SocketTimeoutException、UnknowHostException或来自IOException的任何其他与网络相关的Exception (您可以看到来自IOException的数十个派生类),它可能与没有internet相关,也可能与没有internet相关,因为网络操作可能会在许多不同来源的阶段失败,特别是在移动网络上。
因此,我认为,如果你真的需要‘没有互联网’的行为,你应该在请求之前检查它,并采取不同的行动之前。
当您执行一个调用时,我认为有两种失败需要考虑,IOException对于任何网络错误都是在途中发生的。(只需重试/使用缓存,不管您的情况如何),以及更新错误(HttpException),这意味着您从服务器获得响应(没有网络错误),但是请求本身有问题(在那里,您可能有很多错误的原因--身份验证错误(令牌)、授权等等)。
https://stackoverflow.com/questions/44145888
复制相似问题