当前位置: 首页 > 知识库问答 >
问题:

从Android Kotlin中的Firebase实时数据库读取数据时出现问题

丌官运珧
2023-03-14

我目前正在Android中使用静态编程语言进行培训,每当我试图访问Firebase数据库中当前的数据时都会遇到问题。下面是数据库中的数据:

数据库映像

之后,在将应用程序链接到Firebase之后,我刚刚创建了一个包含所有必需导入的主活动,但不幸的是,每当我执行应用程序并按下按钮时,什么都没有发生。

private lateinit var userReference : DatabaseReference
lateinit var textView : TextView
lateinit var button : Button


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    textView = findViewById(R.id.test)
    button = findViewById(R.id.test2)
    button.setOnClickListener(object : View.OnClickListener{
        override fun onClick(v: View?) {
            userReference = FirebaseDatabase.getInstance().getReference("Users")
            Log.d("IPP", "Im here now...")

            userReference.addValueEventListener(object : ValueEventListener {
                override fun onCancelled(p0: DatabaseError) {
                    Log.d("ipp", p0.message)
                }

                override fun onDataChange(p0: DataSnapshot) {
                    Log.d("Ipp", "Im in the onDataChange")
                    for (childDataSnapshot in p0.children) {
                        Log.d("Ipp",childDataSnapshot.key) }
                }

            })
        }

    })
}

日志没有出现任何时间,它真的很烦人,因为我在留档中搜索,据我所知,这是我应该做的一切(我还检查了数据库中的规则,读取/写入总是正确的)。

编辑:我忘了提到,执行时出现的唯一日志是“我现在在这里…”,点击正在工作的按钮后的一个。

编辑2:数据库中的规则设置为允许对每个人进行读/写操作,仅用于测试目的。数据库中的规则

共有3个答案

章博耘
2023-03-14
private lateinit var userReference : DatabaseReference
lateinit var textView : TextView
lateinit var button : Button


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    textView = findViewById(R.id.test)
    button = findViewById(R.id.test2)
    button.setOnClickListener(object : View.OnClickListener{
        override fun onClick(v: View?) {
            userReference = FirebaseDatabase.getInstance().getReference("Users").getReference("0") <-------- add this
            Log.d("IPP", "Im here now...")

            userReference.addValueEventListener(object : ValueEventListener {
                override fun onCancelled(p0: DatabaseError) {
                    Log.d("ipp", p0.message)
                }

                override fun onDataChange(p0: DataSnapshot) {
                    Log.d("Ipp", "Im in the onDataChange")
                    for (childDataSnapshot in p0.children) {
                        Log.d("Ipp",childDataSnapshot.key) }
                }

            })
        }

    })
}

添加. get参考("0")

楚德辉
2023-03-14

逻辑有点问题,每次按下按钮时都会得到相同的实例,将DatabaseReference的初始化移到按钮外,还有侦听器,因为它们正在按钮内侦听

  userReference = FirebaseDatabase.getInstance().getReference("Users")
 button.setOnClickListener(object : View.OnClickListener{
        override fun onClick(v: View?) {

            Log.d("IPP", "Im here now...")


        }

    })

userReference.addValueEventListener(object : ValueEventListener {
                override fun onCancelled(p0: DatabaseError) {
                    Log.d("ipp", p0.message)
                }

                override fun onDataChange(p0: DataSnapshot) {
                    Log.d("Ipp", "Im in the onDataChange")
                    for (childDataSnapshot in p0.children) {
                        Log.d("Ipp",childDataSnapshot.key) }
                }

            })

现在,每次在用户引用中添加值时,都会触发addValueEventListener,您可以通过单击按钮在用户内部测试此设置值

卢毅
2023-03-14

@peter-hadada peter是对的,但我会解释,如果你需要它,或者有人会找到解决方案一天这里是数据库Firebase的默认规则,使其为假,以防止未经授权的用户访问您的数据库,所以现在将其更改为true阅读和赖特,但在发布版本的工作时,请使其为假,并为用户登录或注册

 类似资料:
  • 我已经花了几个小时阅读产品分支中的0和1。请在Firebase数据库有经验的人帮助我:(

  • 我正在尝试读取我的Flutter应用程序中的firebase实时数据库中的数据,并将其分配给模型类,但是,我在控制台中得到了以下错误。 下面是我到目前为止所做的代码 员工类别 我不知道我做错了什么,请帮我解决这个问题

  • Firebase实时数据库似乎会在添加或删除新项目等时通知我。这很好,但如何获取之前通知我的所有现有项目? 例如,假设我的应用程序列出了数据库中的项目。我第一次启动了我的应用程序。然后创建了“项目1”和“项目2”。Firebase通知我“项目1”和“项目2”,因此我将它们添加到我的应用程序列表中。 现在,我的应用程序已关闭并重新启动。如果创建了新项目“项目3”,我会收到通知,但如何再次检索“项目1

  • 我正在一个聊天应用程序,其中消息存储在firebase实时数据库。现在,如果我创建一个如下所示的节点(Chats-Better-A-ID和-B-ID是自动生成的聊天室密钥),那么我想知道当用户S在聊天应用程序中打开与用户T聊天时,so数据库将只读取存储在Chats-Better-S-T-ID中的消息,而不会读取其他聊天室消息!?我说的对吗?如果是,那么它会降低定价吗? 或 如果我存储如下所示的数据

  • 我有一个Firebase实时数据库,在那里我存储谷歌地图标记数据。看起来是这样的:Firebase数据库 我的应用程序可以选择将您自己的标记添加到数据库中,我的问题是我的应用程序只从Studio 1和T1读取信息,而不是从. ush()添加的随机键中读取信息。当我通过应用程序添加标记时。关于如何让它读取随机键下的标记信息有什么想法吗?我的代码如下所示: 而且 } 最后在哪里向数据库添加新标记: 到

  • 我想从实时数据库中获取数据,数据以地图的形式存在 虽然Product类只是一个普通类,其PRICE属性为Double,但其他所有属性都是String。执行此代码时,会产生以下错误。 I/flatter(4228):类型“\u InternalLinkedHashMap”不是类型“String”的子类型 我可以使用什么样的数据结构/方法/解决方法? 产品类别