Как я могу получить данные для помещения в ArrayList, используя два Firebase ValueEventListeners? - PullRequest
0 голосов
/ 01 апреля 2020

Это просто простое приложение для музыки c. При поиске в SearchActivity я хочу, чтобы имя и название песни composer были найдены и перечислены вместе. Вот моя база данных реального времени в Firebase.

- Artists
    - 1
        - image : "Maroon 5's image"
        - name : "Maroon 5"
    - 2
        - image : "Ruel's image_2"
        - name : "Ruel"
    ...

- Songs
    - 1
        - album : "Speak Your Mind (Deluxe)"
        - image : "album's image"
        - name : "Anne-Marie"
        - title : "2002"
        - url : "song's url"
    - 2
        - album : "On My Way"
        - image : "album's image"
        - name : "Alan Walker & Sabrina Carpenter & Farruko"
        - title : "On My Way"
        - url : "song's url"
    ...

Я пытался получить доступ к этим двум базам данных в android studio, но результат данных в ArrayList (= array ) всегда был нулевым. Вот мой kotlin код в SearchActivity при нажатии кнопки ПОИСК .

FirebaseDatabase.getInstance().getReference("Artists").addListenerForSingleValueEvent(object : ValueEventListener {
    override fun onCancelled(p0: DatabaseError) {

    }

    override fun onDataChange(p0: DataSnapshot) {
        for (artist in p0.children) {
            val model = artist.getValue(Artist::class.java)
            model?.let { array.add(Model(it)) }
        }
    }
})

FirebaseDatabase.getInstance().getRefernce("Songs").addListenerForSingleValueEvent(object : ValueEventListner {
    override fun onCancelled(p0: DatabaseError) {

    }

    override fun onDataChanged(p0: DataSnapshot) {
        for (song for p0.children) {
            val model = song.getValue(Song::class.java)
            model?.let { array.add(Model(it)) }
        }
    }
})

adapter = SearchAdapter(this@SearchActivity, array)
recyclerView.adapter = adpater

Возможно ли получить доступ к двум базам данных и получить значение массива без нулевого значения? Я знаю, что onDatachanged() происходит поздно, но можно ли поместить значение в массив, а затем поместить его в адаптер? Буду признателен, если вы дадите мне знать в Java или Kotlin.

1 Ответ

0 голосов
/ 06 апреля 2020

О! Мне жаль; Я получил решение. Решение - просто добавить adapter.notifyDataSetChange()```` in all onDataChange () `` `метод. Таким образом, я могу получить данные из двух баз данных в FireBase. Спасибо за ваш комментарий!

...