Single.just 异常
Single.just exception
我很难理解为什么 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()");
}
});
我的测试服务 class 看起来像:
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 应用程序崩溃。
看来这不是正确的做法。谁能告诉我应该如何处理在获取要发出的对象时抛出异常的情况?
大多数情况下,未经检查的异常都会被 RxJava 捕获。
但对于已检查的异常,您需要提供自己的 try{}catch(){}
块。
一个例子是 -
String transform(String input) throws IOException;
Observable.just("Hello!")
.map(input -> {
try {
return transform(input);
} catch (Throwable t) {
throw Exceptions.propagate(t);
}
})
查看此 post 了解信息,它解释得很好。
这是对 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)
.
我很难理解为什么 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()");
}
});
我的测试服务 class 看起来像:
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 应用程序崩溃。
看来这不是正确的做法。谁能告诉我应该如何处理在获取要发出的对象时抛出异常的情况?
大多数情况下,未经检查的异常都会被 RxJava 捕获。
但对于已检查的异常,您需要提供自己的 try{}catch(){} 块。
一个例子是 -
String transform(String input) throws IOException;
Observable.just("Hello!")
.map(input -> {
try {
return transform(input);
} catch (Throwable t) {
throw Exceptions.propagate(t);
}
})
查看此 post 了解信息,它解释得很好。
这是对 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)
.