android – Observer.onError关闭不一致

前端之家收集整理的这篇文章主要介绍了android – Observer.onError关闭不一致前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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
   }
}

猜你在找的Android相关文章