None 可以使用提供的参数调用以下函数

None of the following functions can be called with the arguments supplied

代码如下:

getUsersObservable()
    .subscribeOn(Schedulers.io())
    //.observeOn(AndroidSchedulers.mainThread())
    .map { user: User ->
        user.email = String.format("%s@rxjava.wtf", user.name)
        user.name = user.name!!.toUpperCase()
    }
    .subscribe(object : Observer<User> {
        override fun onComplete() {
        }

        override fun onSubscribe(d: Disposable) {
        }

        override fun onNext(t: User) {
        }

        override fun onError(e: Throwable) {
        }
    })

我收到以下错误:

/Users/johann/Work/Dev/Kotlin/rxjava-walkthrough-kotlin/app/src/test/java/ktplay/RxKotlinPlay.kt: (49, 14): None of the following functions can be called with the arguments supplied: @CheckReturnValue @SchedulerSupport public final fun subscribe(p0: ((Unit) -> Unit)!): Disposable! defined in io.reactivex.Observable @SchedulerSupport public final fun subscribe(p0: Observer): Unit defined in io.reactivex.Observable @CheckReturnValue @SchedulerSupport public final fun subscribe(p0: Consumer!): Disposable! defined in io.reactivex.Observable

此错误发生在订阅的行上。

目前,您的 map 运算符采用 User 和 returns Unit 而不是 User。它应该看起来像这样:

.map { user: User ->
    user.email = String.format("%s@rxjava.wtf", user.name)
    user.name = user.name!!.toUpperCase()
    user
}

只修改成订阅"safe"Observer(User?>

    .subscribe(object: Observer<User?> {
                override fun onNext(t: User) {
                    // Perform the value of `t`
                }

                override fun onComplete() {
                    // Perform something on complete
                }

                override fun onSubscribe(d: Disposable) {
                    // Disposable provided
                }

                override fun onError(e: Throwable) {
                    // Handling error
                }
            })