我正在使用 Retrofit 访问我的 API,如下所示:
public interface UserService {
...
@POST("/user/login")
public Observable<User> register(@Body() User user);
}
以下是我访问 API 的方式:
mUserService.register(user)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<User>() {
@Override
public void onCompleted() {
....
}
@Override
public void onError(Throwable e) {
....
}
@Override
public void onNext(User user) {
....
}
});
这工作得很好,除非出现异常(即 IOException 或连接超时), onError 方法不会被触发,而是在主线程上收到一个异常,该异常终止了我的应用程序。
但是,对于某些情况(例如,当 API 调用响应状态代码为 400 时),onError 方法会按预期触发。
在挖掘 logcat 输出后,我发现了这一行,(不知道我应该如何处理它)
rx.exceptions.OnErrorFailedException:尝试将错误传播到 Observer.onError 时发生错误
有人可以让我知道我哪里做错了吗?
根据我之前使用 RxJava 的经验OnErrorFailedException
表示在处理另一个异常时发生了异常onError
method.
如果您没有看到真正原因的堆栈跟踪,则可能是由于 RxJava 中的错误所致CompositeException
(0.19.2及以上版本)https://github.com/Netflix/RxJava/issues/1405 https://github.com/Netflix/RxJava/issues/1405
作为解决方法,请尝试包装您的onError
内的代码try-catch
阻止并记录异常。这样你就会看到你的问题出在哪里onError
实施,你就能解决问题。
@Override
public void onError(Throwable e) {
try {
...
catch(Throwable e) {
// Log the exception
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)