android - 如何使用 Maybe 运算符检查可空性

标签 android kotlin observable rx-java rx-java2

在下面的代码中,我想确认或断言映射运算符返回的对象或发射不为空,或者如果为空 - 应该返回 empty()。 请让我知道它是否正确..

Activity

companion object {
    fun create(): Maybe<WikiApiService>? {
        return Single.just(
            Retrofit.Builder()
                .addCallAdapterFactory(
                    RxJava2CallAdapterFactory.create()
                )
                .addConverterFactory(
                    GsonConverterFactory.create()
                )
                .baseUrl("https://en.wikipedia.org/w/")
                .build()
        )
            .map { retrofit -> retrofit.create(WikiApiService::class.java) }
            .toMaybe()
            //.toObservable()
    }
}

最佳答案

RxJava 不允许流中有空值,因此如果 map 返回空值,流将因错误事件而终止。

您可以将 map 替换为 flatMapMaybe 并返回 Maybe.just(service)Maybe.empty () 如果值为 null。然后,您可以在 subscribe 回调中断言结果是否成功,其中 onSuccess 表示该值不为 null,onComplete 表示该值为空。

两个附加说明。您返回的 maybe 不必声明为 nullable,因为该信息将在 Maybe 本身中捕获。但是,我不确定您是否需要处理这种 null 情况,因为据我所知,retrofit.create 一开始就不应该返回 null。

关于android - 如何使用 Maybe 运算符检查可空性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56959188/

相关文章:

javascript - 在这种情况下是否有更好的 RXJs Operator 可以使用?

javascript - 我如何等待多个结果,然后根据接收到的数据过滤它们?

lambda - 如何设计高阶函数

android - 如何在 dexguard 混淆中禁用非 ASCII 字符?

java - Dagger组件依赖含义

android - Appcelerator vs Android SDK

android - 如何使用jetpack compose删除卡片 View 的边框

android - 如何使用 ParameterResolver 在 JUnit 5 中注入(inject)多个扩展值

events - 是否可以对 F# 事件使用成员而不是 let?

java - 将 char[] 转换为 byte[] 不丢失 'bits'