我一直不明白为什么 RxJava 没有捕获我的异常并且它只是崩溃了。获取要发出的对象时发生异常。
这是我的代码的样子:
TestService testService = new TestService();
Single.just(testService.testGetUser())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSingleObserver<User>() {
@Override
public void onSuccess(@NonNull User user) {
Log.d(TAG, "onSuccess(): Launching Home Activity");
Intent intent = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(intent);
}
@Override
public void onError(@NonNull Throwable e) {
Log.d(TAG, "onError()");
}
});
我的 TestService 类如下所示:
public class TestService {
public User logInUser(LogInData logInData) throws RuntimeException {
Log.d(TAG, "logInUser(): Logging user in");
User user = this.guideMeAroundData.logInUser(logInData);
return user;
}
}
在我的 logInUser() 方法中,如果用户无效,我将引发异常。这会导致我的整个 Android 应用程序崩溃。
看起来这不是正确的方法。有人可以告诉我应该如何处理在获取要发出的对象时引发异常的情况吗?
最佳答案
这是对 Java 语法和操作的一个非常常见(并且令人困惑)的误解。代码
Single.just(testService.testGetUser())
相当于
User tmp1 = testService.testGetUser();
Single.just(tmp1)
哪里testGetUser
在 RxJava 参与之前执行,因此它抛出的任何异常都发生在这之前。
您可能正在寻找
Single.fromCallable(() -> testService.testGetUser())
或者简单地将 Retrofit API 定义为 Single<User> logInUser(LogInData data)
.
关于java - 单一异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44992124/