Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android Studio上从Firebase检索数据_Android_Kotlin_Firebase Realtime Database - Fatal编程技术网

在Android Studio上从Firebase检索数据

在Android Studio上从Firebase检索数据,android,kotlin,firebase-realtime-database,Android,Kotlin,Firebase Realtime Database,有人能帮我修一下吗 以下代码可以正常工作,但不会从Firebase检索数据并显示在TextView中 private fun viewData() { val postReference = FirebaseDatabase.getInstance().getReference("dataID") val dbView= findViewById<TextView>(R.id.txtFdbData) val postListener = object : Va

有人能帮我修一下吗

以下代码可以正常工作,但不会从Firebase检索数据并显示在TextView中

private fun viewData() {
    val postReference = FirebaseDatabase.getInstance().getReference("dataID")
    val dbView= findViewById<TextView>(R.id.txtFdbData)
    val postListener = object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            val post = dataSnapshot.getValue(Post::class.java)
            dbView.text=post?.postName
        }
        override fun onCancelled(databaseError: DatabaseError) {
        }
    }
    postReference.addValueEventListener(postListener)
    Toast.makeText(this,"Retrieved",Toast.LENGTH_LONG).show()
}
当我点击按钮时,它显示toast消息“Retrieved”(已检索),文本视图(txtFdbData)中给出的默认值被删除(或者可能被替换为空字符串?),我不知道)

以下是博士后课程

data class Post (
    val postName: String="",
    val postDescription:String="")

我正在Android Studio上工作,使用Kotlin和Firebase实时数据库。

您可以查询数据库返回项目列表。因此,循环浏览它并尝试获取
Post
。检查以下内容:

override fun onDataChange(dataSnapshot: DataSnapshot) {
    dataSnapshot.children.forEach {childSnapshot ->
        val post = childSnapshot.getValue(Post::class.java)
        dbView.text=post?.postName
    }
}

您可以查询数据库返回项目列表。因此,循环浏览它并尝试获取
Post
。检查以下内容:

override fun onDataChange(dataSnapshot: DataSnapshot) {
    dataSnapshot.children.forEach {childSnapshot ->
        val post = childSnapshot.getValue(Post::class.java)
        dbView.text=post?.postName
    }
}
getReference(“dataID”)
不是您的数据节点,而是您的父节点。 然后您必须使用
getChildren()
方法访问它们的子对象

使用此选项更改数据更改方法

 override fun onDataChange(dataSnapshot: DataSnapshot) {
        for (postSnapshot : dataSnapshot.getChildren()) {
        val post = postSnapshot .getValue(Post::class.java)
        dbView.text=post?.postName
         }
    }
getReference(“dataID”)
不是您的数据节点,而是您的父节点。 然后您必须使用
getChildren()
方法访问它们的子对象

使用此选项更改数据更改方法

 override fun onDataChange(dataSnapshot: DataSnapshot) {
        for (postSnapshot : dataSnapshot.getChildren()) {
        val post = postSnapshot .getValue(Post::class.java)
        dbView.text=post?.postName
         }
    }

您的侦听器正在忽略错误。将异常记录在onCancelled中,以查看是否存在错误。对firebase的操作是异步的。因此,您的
Toast
在执行操作之前会显示消息。这意味着你的
Toast
不能反映实际结果。添加您的数据库结构,以便用空字符串替换。因此,请检查
post
firebase
@DougStevenson中的数据。您可以帮助我吗?@Md.Asaduzzaman{“dataID”:{“-LwM6GI3UwBxMkdoWiVe”:{“postscription”:“description1”,“postName”:“Test data”}您的侦听器忽略了错误。将异常记录在onCancelled中,以查看是否存在错误。对firebase的操作是异步的。因此,您的
Toast
在执行操作之前会显示消息。这意味着你的
Toast
不能反映实际结果。添加您的数据库结构,以便用空字符串替换。因此,请检查
post
firebase
@DougStevenson中的数据。您能帮我吗?@Md.Asaduzzaman{“dataID”:{“-LwM6GI3UwBxMkdoWiVe”:{“postscription”:“description1”,“postName”:“testdata”}}好极了,它起作用了。你能告诉我我的代码出了什么问题吗?我对这件事一无所知。刚开始学习。getReference(“dataID”)不是您的数据节点,而是您的父节点。然后你必须访问他们的孩子。你的代码绝对是好的。你只是错过了我在回答中提到的一件事,在你的数据库中,
dataID
可以包含
Post
的列表,键类似于
-LwM6GI3UwBxMkdoWiVe
。在代码中,您试图将该键解析为不正确的
Post
对象。好极了,它成功了。你能告诉我我的代码出了什么问题吗?我对这件事一无所知。刚开始学习。getReference(“dataID”)不是您的数据节点,而是您的父节点。然后你必须访问他们的孩子。你的代码绝对是好的。你只是错过了我在回答中提到的一件事,在你的数据库中,
dataID
可以包含
Post
的列表,键类似于
-LwM6GI3UwBxMkdoWiVe
。在代码中,您试图将该键解析为
Post
对象,这是不正确的。