java - 单一异常

标签 java android rx-java rx-android

我一直不明白为什么 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/

相关文章:

Java - 要在 Jtable 中显示的 Arraylist 内容

java - SherlockFragment 内的 SQLite 连接打开错误

java - 动态内存释放中的完全垃圾收集是什么意思?

java - 下载 Android SDK 工具修订版 21.1 JDeveloper/ADF Mobile

java - 在 Android 4.4.2 上更改短信应用默认设置

rx-java - 需要 RXJava 帮助来替换 AsyncTask

android - RxJava 链式 Observable 和 NetworkMainThreadException

java - 无法在 WLS 中使用 Logback

安卓 : Full Screen Activity with Title bar

java - Rxjava使用Zip运算符