Reputation: 19
I have converted a few JAVA
classes into Kotlin
but I am getting Type Mismatch Error
issue in Android Studio.
I am adding my code snippets along with the screenshot of the message in IDE for reference.
JAVA CODE
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 CODE
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)
}
Issue (IDE Warning)
Upvotes: 2
Views: 222
Reputation: 7649
You have just a lambda function that can be anything. Sometimes, the type inference doesn't work 100%, so you have to help it a bit
I don't have an IDE right now, but I'd say that adding the type should be enough. Something like:
Observable.zip<...>(...,
BiFunction { subLocalities, localities ->
mLocalities = localities
mSubLocalities = subLocalities
true
}
)
Just as a side note, beware that one of the cool things of RxJava is the functional approach. Nothing happens if you don't want to (i.e. you invoke subscribe()
) and all the effects are confined in the Observable flow. These assignments
mLocalities = localities
mSubLocalities = subLocalities
are introducing side effects that may become hard to track bugs in a future
Upvotes: 1
Reputation: 436
if you want to use zip
smoothly at kotlin, you should add RxKotlin on your gradle
try Observables.zip. not Observable.zip
Upvotes: 0