如何从 firebase Android kotlin 获取基于 userId 的数据?
How to get data based on userId from firebase Android kotlin?
我正在尝试根据 userId 从 firebase 获取数据,当用户登录时,我需要根据其 id 显示他的个人资料详细信息,但我无法获取它。有帮助吗?
auth = FirebaseAuth.getInstance()
databaseRef = FirebaseDatabase.getInstance().getReference("Users/")
databaseRef.addValueEventListener(object: ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
//I want first_name and all other details of users
Log.e("first_name", snapshot.child(uid).getValue(String::class.java))
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
一个问题是您似乎没有在任何地方初始化 uid
。所以应该是:
auth = FirebaseAuth.getInstance()
uid = auth.currentUser.uid
另请参阅 getting the current user 上的 Firebase 文档。
下一步不一定是错误,但绝对是您想要进行的优化。现在您将整个 Users
节点读入您的 Android 应用程序,然后仅从 /Users/$uid
获取值。当您向数据库中添加更多用户时,这不会扩展。
您想要做的是 仅 从数据库中为当前用户加载节点:
databaseRef = FirebaseDatabase.getInstance().getReference("Users/")
var userRef = databaseRef.child(uid)
userRef.addValueEventListener(object: ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
Log.e("first_name", snapshot.getValue(String::class.java))
}
...
我正在尝试根据 userId 从 firebase 获取数据,当用户登录时,我需要根据其 id 显示他的个人资料详细信息,但我无法获取它。有帮助吗?
auth = FirebaseAuth.getInstance()
databaseRef = FirebaseDatabase.getInstance().getReference("Users/")
databaseRef.addValueEventListener(object: ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
//I want first_name and all other details of users
Log.e("first_name", snapshot.child(uid).getValue(String::class.java))
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
一个问题是您似乎没有在任何地方初始化 uid
。所以应该是:
auth = FirebaseAuth.getInstance()
uid = auth.currentUser.uid
另请参阅 getting the current user 上的 Firebase 文档。
下一步不一定是错误,但绝对是您想要进行的优化。现在您将整个 Users
节点读入您的 Android 应用程序,然后仅从 /Users/$uid
获取值。当您向数据库中添加更多用户时,这不会扩展。
您想要做的是 仅 从数据库中为当前用户加载节点:
databaseRef = FirebaseDatabase.getInstance().getReference("Users/")
var userRef = databaseRef.child(uid)
userRef.addValueEventListener(object: ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
Log.e("first_name", snapshot.getValue(String::class.java))
}
...