Возврат Наблюдаемый из пожарного магазина - PullRequest
0 голосов
/ 29 сентября 2019

Эй, ребята, я новичок в реактивном стиле, и у меня возникли проблемы с превращением снимка запроса Firebase в и наблюдаемый, как бы вы выполнили эту функцию?:

    override fun GetAllRiders() : Observable<ArrayList<Rider>> {

    var riders = database.collection(DATABASE_COLLECTION_RIDERS)
    riders.addSnapshotListener { querySnapshot, firebaseFirestoreException ->
        val riderList = querySnapshot?.toList()
    }

    return ...
}

1 Ответ

1 голос
/ 29 сентября 2019

Вы должны создать свой Observable и использовать обратные вызовы (например, onNext или onError), чтобы уведомить о появлении новых данных

override fun getAllRiders() = Observable.create { emitter ->
    var riders = database.collection(DATABASE_COLLECTION_RIDERS)

    // here you attach a callback which will be called when .dispose() is called
    // or setDisposable (but only one of them at a time! otherwise you're observable will get disposed while creating)
    emitter.setCancelable { riders.cancel() /* don't remember the specifics :( */ }

    riders.addSnapshotListener { querySnapshot, firebaseFirestoreException ->
        if (!emitter.isCancelled) {
            if (firebaseFirestoreException != null) {
                // callback for exceptions. here you can pass your Throwable
                emitter.onError(firebaseFirestoreException)
            } else {
                val riderList = querySnapshot?.toList()

                // Callback which will populate passed data to your .subscribe callback
                emitter.onNext(riderList)
            }
        }
    }
}

PS Я призываю вас придерживаться kotlincodestyle .Функции должны быть названы строчными буквами;)

...