как реализовать вложенный Value Event Listener для извлечения данных из firebase - PullRequest
0 голосов
/ 29 октября 2018

Я хочу получить данные из базы огня с помощью вложенного ValueEventListener. Сначала я нахожу предложения в дереве комнат или нет, после этого - предложения, а затем хочу получить скидку на эту сделку.

fun deal(room:String): Flowable<List<Deals>>? =
    observeValueEvent(ref.child("rooms/$room/deals"))
            .map { snapshot ->
                snapshot.children.mapNotNull { child ->
                    var deal = child.key
                    if (deal != null) {
                        observeValueEvent(ref1.child("deals/$deal")).map { snapshot1 ->

                            snapshot1.children.mapNotNull { child1 ->

                                var name = child1.getValue().toString()
                                Deals(name)
                            }
                        }

                    }else{
                        null
                    }
                }
            }

это функция для получения стоимости из сделок. для ValueEventListener я делаю другую функцию

 private fun observeValueEvent(query: Query): Flowable<DataSnapshot> = Flowable
        .create({ emitter ->
            val valueEventListener = object : ValueEventListener {
                override fun onDataChange(snapshot: DataSnapshot) {
                    emitter.onNext(snapshot)
                }

                override fun onCancelled(error: DatabaseError) {
                    if (!emitter.isCancelled) {
                        emitter.onError(Throwable(error.details))
                    }
                }
            }
            emitter.setCancellable { query.removeEventListener(valueEventListener) }
            query.addValueEventListener(valueEventListener)
        }, BackpressureStrategy.LATEST)

я пробовал таким образом, но выдает ошибку

"mismatch type , required: Flowable<List<Deals>>, Found: Flowable<any>" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...