javaandroidkotlinrx-binding

RxTextView in Kotlin cannot extract String from KFunction1


In Java I use RxTextView and call .subscribe() in Fragment to invoke and transmit String as a parameter to a method in Presenter. Everything works fine.

Java:

        compositeDisposable.add(
                RxTextView.textChanges(searchEditText)
                        .map(CharSequence::toString)
                        .debounce(500, TimeUnit.MILLISECONDS)
                        .distinctUntilChanged()
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribeOn(Schedulers.computation())
                        .subscribe(query -> {
                            presenter.setQueryFilter(query); // query parameter: String
                        })
        );

I get confused with RxTextView in Kotlin because in function .subscribe( ... ) value parameter is a generic variance instead of a String only as in Java is.

Kotlin:

    compositeDisposable.add(
            RxTextView.textChanges(activity.findViewById(R.id.searchEditText))
                    .map {CharSequence::toString}
                    .debounce(500, TimeUnit.MILLISECONDS)
                    .distinctUntilChanged()
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.computation())
                    .subscribe { query ->
                        getPresenter().setQueryFilter(query.toString()) //query parameter: KFunction1<CharSequence,String>! 
                        //query.toString gives a such result: fun kotlin.Any.toString(): kotlin.String
                    }
    )

How could I get a proper string value from EditText and connect this with .subscibre() like in Java?

SOLUTION

I replaced .map{CharSequence::toString} with: .map{it.toString()}


Solution

  • Change

    map {CharSequence::toString}
    

    to

    map (CharSequence::toString)