我正在使用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
- }
- }