android – Observer.onError关闭不一致

前端之家收集整理的这篇文章主要介绍了android – Observer.onError关闭不一致前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Retrofit来访问我的API,如下所示:
  1. public interface UserService {
  2. ...
  3. @POST("/user/login")
  4. public Observable<User> register(@Body() User user);
  5. }

以下是我如何访问我的API:

  1. mUserService.register(user)
  2. .subscribeOn(Schedulers.newThread())
  3. .observeOn(AndroidSchedulers.mainThread())
  4. .subscribe(new Observer<User>() {
  5. @Override
  6. public void onCompleted() {
  7. ....
  8. }
  9.  
  10. @Override
  11. public void onError(Throwable e) {
  12. ....
  13. }
  14.  
  15. @Override
  16. public void onNext(User user) {
  17. ....
  18. }
  19. });

除非出现异常(即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实现有什么问题,你将能够解决问题.

  1. @Override
  2. public void onError(Throwable e) {
  3. try {
  4. ...
  5. catch(Throwable e) {
  6. // Log the exception
  7. }
  8. }

猜你在找的Android相关文章