gpt4 book ai didi

android - Observer.onError 触发不一致

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:29 27 4
gpt4 key购买 nike

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

作为解决方法,请尝试将您的 onError 代码包装在 try-catch block 中并记录异常。通过这种方式,您将看到您的 onError 实现有什么问题,并且您将能够解决问题。

@Override
public void onError(Throwable e) {
try {
...
catch(Throwable e) {
// Log the exception
}
}

关于android - Observer.onError 触发不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com