Наблюдаемые преобразуются в kotlin - выпуск - PullRequest
2 голосов
/ 31 января 2020

Я преобразовал несколько JAVA классов в Kotlin, но в Android Studio возникает проблема Type Mismatch Error.

Я добавляю фрагменты кода вместе со снимком экрана сообщения в IDE для справки.

JAVA КОД

Disposable disposable = Observable.just(true)
.subscribeOn(Schedulers.io())
.flatMap((Function<Object, ObservableSource<?>>) o ->
    Observable.zip(mModel.getSubLocalitiesFromStores(storeType, storeVerified),
        mModel.getLocalitiesFromSubLocalities(),
        (subLocalities, localities) -> {
            mLocalities = localities;
            mSubLocalities = subLocalities;
            return true;
        }
        ))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(res -> {
    setUpLocalitySpinner(spinnerLocalities);
    setUpSubLocalitySpinner(spinnerSubLocalities);
});
compositeDisposable.add(disposable);

KOTLIN КОД

Observable.just(true)
.subscribeOn(Schedulers.io())
.flatMap({ o->
    Observable.zip<ArrayList<SubLocality>, ArrayList<Locality>, Boolean>(mModel!!.getSubLocalitiesFromStores(storeType, storeVerified),
        mModel!!.localitiesFromSubLocalities,
        { subLocalities, localities ->
            mLocalities = localities
            mSubLocalities = subLocalities
            true
        }
        )
} as Function<Any, ObservableSource<*>>)
.observeOn(AndroidSchedulers.mainThread())
.subscribe { res ->
    setUpLocalitySpinner(spinnerLocalities)
    setUpSubLocalitySpinner(spinnerSubLocalities)
}

Проблема (IDE Предупреждение)

enter image description here

Ответы [ 2 ]

1 голос
/ 31 января 2020

У вас есть только лямбда-функция, которая может быть чем угодно. Иногда вывод типа не работает на 100%, поэтому вам нужно немного помочь

У меня сейчас нет среды IDE, но я бы сказал, что добавления типа должно быть достаточно. Что-то вроде:

Observable.zip<...>(...,
    BiFunction { subLocalities, localities ->
        mLocalities = localities
        mSubLocalities = subLocalities
        true
    }
)

Просто отметьте, что одна из самых интересных вещей в Rx Java - это функциональный подход. Ничего не происходит, если вы не хотите (т.е. вы вызываете subscribe()), а все эффекты ограничены наблюдаемым потоком. Эти задания

        mLocalities = localities
        mSubLocalities = subLocalities

представляют побочные эффекты, которые могут стать трудными для отслеживания ошибок в будущем

0 голосов
/ 31 января 2020

, если вы хотите плавно использовать zip на kotlin, вы должны добавить Rx Kotlin на ваш gradle

и попробовать Observables.zip. not Observable.zip

...