【问题标题】:How can I get data to put into an ArrayList using two Firebase ValueEventListeners?如何使用两个 Firebase ValueEventListener 将数据放入 ArrayList?
【发布时间】:2020-04-01 01:24:36
【问题描述】:

这只是一个简单的音乐应用程序。在SearchActivity 中搜索时,我希望将作曲家的姓名和歌曲名称一起搜索并列出。这是我在 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) 中的数据结果始终为空。这是我在SearchActivity 中的 kotlin 代码,点击按钮 SEARCH

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 告诉我,我将不胜感激。

【问题讨论】:

  • 你能用你的数据库的实际 JSON 替换示意图吗(作为文本,请不要截图)?您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。
  • 请在此处查看我的答案:stackoverflow.com/questions/60896895/…
  • 所以要同时搜索Artist节点和Songs节点?

标签: android firebase firebase-realtime-database adapter


【解决方案1】:

哦!对不起;我有一个解决方案。解决方法就是添加adapter.notifyDataSetChange()```` in allonDataChange()``` 方法。这样,我可以从firebase中的两个数据库中获取数据。感谢您的所有评论!

【讨论】:

    猜你喜欢
    • 2019-12-12
    • 2022-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2018-08-16
    相关资源
    最近更新 更多