【问题标题】:None of the following functions can be called with the arguments supplied不能使用提供的参数调用以下函数
【发布时间】:2019-01-06 08:08:06
【问题描述】:

代码如下:

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): 下列函数都不能用 提供的参数:@CheckReturnValue @SchedulerSupport public final fun subscribe(p0: ((Unit) -> Unit)!): 一次性的!定义在 io.reactivex.Observable @SchedulerSupport 公共最终乐趣 subscribe(p0: Observer): 定义的单位 io.reactivex.Observable @CheckReturnValue @SchedulerSupport 公共 最终乐趣订阅(p0:消费者!):一次性!定义在 io.reactivex.Observable

这个错误发生在subscribe的那一行。

【问题讨论】:

    标签: kotlin rx-java


    【解决方案1】:

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

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

    【讨论】:

    • 我真的很亲密。我把“return”这个词放在最后一行的前面,但它抱怨“return is not allowed here”。非常感谢。
    • 这是一篇介绍 lambda 的 return 语句的文章:medium.com/@belokon.roman/…
    • 我不太精通 RxJava,但如果目标只是对每个对象执行突变,我认为doOnNextmap 更合适
    【解决方案2】:

    只修改成订阅“安全”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
                    }
                })
    

    【讨论】:

    • 绝对正确!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多