我正在使用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方法中处理另一个异常时发生异常.
如果没有看到真正原因的堆栈跟踪,可能是由于RxJava与CompositeException(版本0.19.2及以上)的错误https://github.com/Netflix/RxJava/issues/1405
作为一种解决方法,尝试在try-catch块中包装onError代码并记录异常.这样你会看到你的onError实现有什么问题,你将能够解决问题.
@Override public void onError(Throwable e) { try { ... catch(Throwable e) { // Log the exception } }