当前位置: 首页 > 知识库问答 >
问题:

Android rxJava-Null对象包装在观察

皇甫乐
2023-03-14

我有一个这样简单的用例:在远程源代码中查找一本书,如果它不存在,就创建它。这就是我使用rxJava1的方法:

public void handleBook(int id) {
    getBookById(id) 
        .flatMap(new Func1<Book, Observable<Book>> {
            @Override
            public Observable<Book> call(Book book) {
                if(book != null) // it exists
                ...
                else // it's null - it doesn't exist ...
            }
        }
}


public Observable<Book> getBookById(int id) {
    Book book = remoteSource.book(id)
    return Observable.just(book)
}

在这种情况下,如果对象book为null,则Observable.just调用抛出异常。它显式地检查空值。回到rxJava 1,我可以将一个null作为值传递给Observable.just(或其他附件),然后在映射或平面映射运算符中,我会检查我得到的值是否为null(意味着结果不存在)或否(意味着我得到了一些结果)。

由于这个限制,我似乎不能再做这个检查了。我试着让你看得到。如果book对象为空,则整个线程将完成,并在返回值可见时结束。空()。

如果我需要的东西在那里,我如何检查执行的rx链,然后分支执行链?

共有1个答案

萧和同
2023-03-14

而不是使用Observable

注意:现在我没有IDE,所以代码可能会有一些编译器失败。我想你会很容易修好的

public Single<Book> getBookById(int id) {
    return Single.create((e) => {
        Book book = remoteSource.book(id)
        if (book != null)
            e.emit(book);
        else
            e.fail();
    }
}

public void handleBook(int id) {
    getBookById(id) 
        .onErrorResume(e => createBook(...))
        ...
}

就像前面说的,我不确定确切的代码,但你可以把它当作伪代码来读

 类似资料:
  • 定义 对象是 JavaScript 语言最主要的数据类型,三种原始类型的值——数值、字符串、布尔值——在一定条件下,也会自动转为对象,也就是原始类型的“包装对象”(wrapper)。 所谓“包装对象”,指的是与数值、字符串、布尔值分别相对应的Number、String、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。 var v1 = new Number(123)

  • 对象包装器是实现了 freemarker.template.ObjectWrapper 接口的类。它的目标是实现Java对象(应用程序中特定类等,比如 String, Map,List 实例)和FTL类型系统之间的映射。换句话说, 它指定了模板如何在数据模型(包含从模板中调用的Java方法的返回值)中发现Java对象。 对象包装器作为插件放入 Configuration 中,可以使用 object

  • 包装对象 定义 包装对象的构造函数 包装对象实例的方法 原始类型的自动转换 自定义方法 Boolean对象 概述 Boolean实例对象的布尔值 Boolean函数的类型转换作用 包装对象 定义 在JavaScript中,“一切皆对象”,数组和函数本质上都是对象,就连三种原始类型的值——数值、字符串、布尔值——在一定条件下,也会自动转为对象,也就是原始类型的“包装对象”。 所谓“包装对象”,就是分

  • 问题内容: 我想监视字典中的更改,但是由于某种原因,未调用监视回调。 这是我使用的控制器: 这是小提琴。 我希望每次更改名称或姓氏时都会触发$ watch回调,但是不会发生。 正确的方法是什么? 问题答案: 调用with 作为第三个参数: 默认情况下,在JavaScript中比较两个复杂对象时,将检查它们是否具有“引用”相等性,即询问两个对象是否引用同一事物,而不是“值”相等性,后者检​​查这些对

  • 我有一个class,它在其他属性中包含一个可观察列表 如何让JavaFX提取class