在Android Studio上从Firebase检索数据
有人能帮我修一下吗 以下代码可以正常工作,但不会从Firebase检索数据并显示在TextView中在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
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
对象,这是不正确的。