Android - я не могу получить никакого результата от RX в Kotlin вместо EventBus - PullRequest
0 голосов
/ 24 сентября 2018

Я использую java и Kotlin в своем проекте, и я использую с EventBus, но не работаю с Kotlin, потому что я использую RX между Java кодом и Kotlin вместоEventBus, но не получите никакого результата в Kotlin class.

Мой код похож на ниже:

object EventBusTest {

    private val publisher = PublishSubject.create<Any>()

    @JvmStatic
    fun publish(event: Any) {
        publisher.onNext(event)
    }

    // Listen should return an Observable and not the publisher
    // Using ofType we filter only events that match that class type
    fun <T> listen(eventType: Class<T>): Observable<T> = publisher.ofType(eventType)

}

И я использую в Java class:

EventBusTest.publish(123);

И я вхожу в Kotlin class:

EventBusTest.listen(Int::class.java).subscribe{
    Log.i("LOG", "result:  $it")
}

Но я не могу получить никакого результата.

Ниже - мои библиотеки:

rxKotlin : "io.reactivex.rxjava2:rxkotlin:${versions.rxKotlin}",
....
implementation 'io.reactivex.rxjava2:rxjava:2.1.9'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
implementation 'com.netflix.rxjava:rxjava-android:0.20.3'

1 Ответ

0 голосов
/ 24 сентября 2018

Вы используете два разных типа данных.Вы пытаетесь прослушать Int, где, когда вы публикуете, оно становится Integer.Вместо этого попробуйте EventBusTest.listen(Integer::class.java) Кроме того, Int - это класс Kotlin, полученный из числа

. Вы также можете попробовать что-то подобное с вашим существующим кодом. var someNumber = 123 EventBusTest.publish(someNumber); Это будет работать, если вы слушаете Int::class.java

Я надеюсь, что объяснение ясное.

...