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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...