Android 未知后异常和连接异常通过改装激发

Android 未知后异常和连接异常通过改装激发,android,retrofit,rx-java,Android,Retrofit,Rx Java,我正在使用我的Android应用程序中的RxJava适配器进行改装。问题是,我收到一些报告,在一些设备中,改装正在触发ConnectionException,而在一些其他设备中,改装正在触发unknownhostexption。这使得使用onerrorsume()方法插入其他rx.observates非常困难。更糟糕的是,两个异常共享的唯一公共父级是IOException,这是非常通用的。有办法把这统一起来吗 我只是在处理未知后异常案例。但现在我也有了这个连接异常,谁知道其他设备中还有哪个异常

我正在使用我的Android应用程序中的RxJava适配器进行改装。问题是,我收到一些报告,在一些设备中,改装正在触发
ConnectionException
,而在一些其他设备中,改装正在触发
unknownhostexption
。这使得使用
onerrorsume()
方法插入其他
rx.observates
非常困难。更糟糕的是,两个异常共享的唯一公共父级是
IOException
,这是非常通用的。有办法把这统一起来吗

我只是在处理
未知后异常
案例。但现在我也有了这个
连接异常
,谁知道其他设备中还有哪个异常

我可以将这两个异常映射到一个通用的自定义异常,类似于
NoInternetConnectionException
。但是,还有更多的例外情况吗

更新:

目前,我的交互者/用例正在执行以下操作:

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);
        }
    });
mNetworkUserRepository.getUserList()
.onerrorResult(observeUtils.whenExceptionIs(reformationError.class),mUserDatabase.getUserList())//服务器端错误
.onerrorResult(observeUtils.whenExceptionIs(UnknownHostException.class),mUserDatabase.getUserList()//无internet
.onerrorResult(observeUtils.whenExceptionIs(ConnectionException.class)),mUserDatabase.getUserList()//同一事物的另一个异常
.subscribe(新的MySubscriber(){
@凌驾
public void onNext(列表响应){
callback.showOnUI(响应);
}
});

因此,基本上在三星S7中,UnkownHostException被激发,在另一个设备Nexus中,ConnectionException被激发。我不喜欢这样,还有多少“没有互联网”的例外?我认为,如果我试图在没有互联网连接的情况下发出http请求,那么这种改进只会引发UnknownHostException。我如何将其分组?我不想为不同的设备和东西附加N个onResumeErrors

你不能从异常中真正知道是否没有internet,或者在过程中发生了其他网络错误,正如你所遇到的,你可能会遇到许多其他情况和异常
SocketTimeoutException
UnknowHostException
或从
IOException
派生的任何其他与网络相关的
Exception
(您可以从中看到几十个派生类),它可能与internet无关,也可能与internet无关,因为网络操作可能会在来自不同来源的许多阶段失败,尤其是当你在移动网络上

因此,我认为,如果你真的需要“不上网”的行为,你应该在提出请求之前采取不同的行动


当您执行一个调用时,我认为有2种失败需要考虑,<代码> IOExux/COD> >一路上发生的任何网络错误。(除了重试/使用缓存(无论您的情况如何)和改型错误(

HttpException
),这意味着您收到了服务器的响应(没有网络错误),但请求本身有问题(在这方面,您可能会有很多错误原因—身份验证错误(令牌)、授权等)

问题到底是什么?您是否试图按异常类型区分不同类型的错误?使用泛型异常有什么问题?@yosriz我更新了我的答案。如果您需要更多信息,请告诉我。只要捕获
IOException
,就可以设置(假设您的
whennexceptionis
方法没有使用类相等)。@TassosBassoukos是的,我知道,这实际上是我现在正在使用的解决方法,但我不喜欢它,因为我认为IOException太通用了。我的意思是,当从存储读取文件时出错时,IOException也会被触发。好的,是的,正如我在上面所评论的,现在从IOException挂钩是我正在使用的解决方法。我会等着看是否有人能提供更好的解决方案,但我想最终,我可能不得不这么做。@yosriz>>如果你真的需要“不上网”行为,你应该在请求之前检查它