【问题标题】:KOTLIN: My data do not gets from firebase realtime databaseKOTLIN:我的数据不是从 firebase 实时数据库中获取的
【发布时间】:2021-06-20 22:53:45
【问题描述】:

我正在尝试从我的 firebase 实时数据库中获取数据。 在我的数据库中有一个名为“groups”的表,它有 3 个值“datetime”、“title”、“username”。 我想获取标题值并添加我的列表。 通常在静态版本中,我有一个列表,其中包括 GroupModelRetrieve 类型并列出列表视图中的标题 现在我在列表视图中看不到标题它是空的 我是移动编程的新手。所以,如果你能帮助我,我很感激。

这是我的代码

  val list: ArrayList<GroupModelRetrieve> = arrayListOf()

        database = FirebaseDatabase.getInstance()
        databaseReference = database?.getReference("groups")!!.child("title")
        val postListener = object : ValueEventListener{
            override fun onCancelled(error: DatabaseError) {
                Toast.makeText(requireContext(), "Fail to get data.", Toast.LENGTH_SHORT).show();
            }

            override fun onDataChange(snapshot: DataSnapshot) {
                val data = snapshot.getValue()
                val item = GroupModelRetrieve(data.toString())
                list.add(item)
            }
        }

            databaseReference!!.addValueEventListener(postListener)


        val adapter = GroupsAdapter(requireActivity(), list)
        v.findViewById<ListView>(R.id.list_view_groups).adapter = adapter

我也在添加我的模型

public class GroupModelRetrieve(Title: String) {

    val title:String
    
    init {
        title = Title
    }
}

如果需要,我可以添加更多代码。感谢您的帮助。

【问题讨论】:

  • 您遇到什么错误?或者你有什么问题?
  • @FelipeCruzV10 感谢您的评论。我看不到标题。我编辑了我的帖子
  • 我认为您的问题可能与适配器的实现有关。适配器代码在哪里?

标签: android firebase kotlin firebase-realtime-database


【解决方案1】:

您需要将新更改通知列表,因为默认情况下 Firebase 与主线程异步工作,因此将适配器设置为列表将在任何 Firebase 响应之前被调用。

val adapter = GroupsAdapter(requireActivity(), list)
val listView = v.findViewById<ListView>(R.id.list_view_groups) // << Set listView in a variable 
listView.adapter = adapter

val list: ArrayList<GroupModelRetrieve> = arrayListOf()

    database = FirebaseDatabase.getInstance()
    databaseReference = database?.getReference("groups")!!.child("title")
    val postListener = object : ValueEventListener{
        override fun onCancelled(error: DatabaseError) {
            Toast.makeText(requireContext(), "Fail to get data.", Toast.LENGTH_SHORT).show();
        }

        override fun onDataChange(snapshot: DataSnapshot) {
            val data = snapshot.getValue()
            val item = GroupModelRetrieve(data.toString())
            list.add(item)
            adapter.notifyDataSetChanged() // <<<<<<< Here is the change
        }
    }

   databaseReference!!.addValueEventListener(postListener)

另外我建议使用addListenerForSingleValueEvent() 而不是addValueEventListener(),以防您只需要一次列表而不需要实时更新

【讨论】:

  • 这不起作用。 notifyDataSetChanged 方法给出错误“未解析的引用:notifyDataSetChanged”
  • @CerenKeklik 你说得对,这应该在适配器上调用,我现在修好了
  • 谢谢。我还有一个问题。在这种风格中,只显示了一个标题。我看不到所有的标题。我该怎么做
  • @CerenKeklik 能否调试一下onDataChange 方法是否被多次调用
猜你喜欢
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
相关资源
最近更新 更多