gpt4 book ai didi

android - Activity 之外的 Firebase 数据库 EventListener

转载 作者:行者123 更新时间:2023-11-29 02:28:42 25 4
gpt4 key购买 nike

我是 Android 和 Kotlin 的新手,我想在我的项目中实现一个返回特定数据库快照的 FirebaseRetriever 类。

现在我遇到了永远不会触发 EventListener 的问题,因此,当然,我得到了一个空对象。

这是我的数据类:

public class FirebaseRetriever() {

private val TAG = "FirebaseRetriever"
private lateinit var fbData: FirebaseDatabase
private lateinit var fbAuth: FirebaseAuth
private lateinit var userRef: DatabaseReference
//Snapshots
private lateinit var userSnap: DataSnapshot

init {
fbData = FirebaseDatabase.getInstance()
userRef = fbData.reference.child("users")
fbAuth = FirebaseAuth.getInstance()

userRef.addValueEventListener(object : ValueEventListener {
override fun onCancelled(e: DatabaseError) {
Log.e(TAG, "Data could not be retrieved from Database." + e.message)
}

override fun onDataChange(snap: DataSnapshot) { // is never executed
userSnap = snap
}

})
}

public fun getUserSnap(): DataSnapshot {
return userSnap // returns null
}
}

这就是我调用 getUser() 的方式:

firebaseRetriever = FirebaseRetriever()
...
val uniSnap = firebaseRetriever.getUniSnap()

Firebase EventListener 是否有可能只能在常规 AndroidActivity 中工作,还是我做错了什么?

提前致谢。

最佳答案

当您调用 getUserSnap 时,数据很可能还没有加载。要验证这一点,请添加更多日志语句:

Log.i(TAG, "Starting to read from database.")

userRef.addValueEventListener(object : ValueEventListener {
override fun onCancelled(e: DatabaseError) {
Log.e(TAG, "Data could not be retrieved from Database." + e.message)
}

override fun onDataChange(snap: DataSnapshot) { // is never executed
Log.i(TAG, "User read from database.")
userSnap = snap
}

})

public fun getUserSnap(): DataSnapshot {
Log.i(TAG, "Getting user.")
return userSnap // returns null
}

当你用这个运行你的应用程序时,输出可能是:

Starting to read from database.

Getting user.

User read from database.

这可能不是您期望的顺序。 Firebase 异步从数据库加载数据,因为结果可能需要一些时间才能可用。允许您的代码继续运行,而不是让您的应用程序等待(这会触发应用程序无响应对话框)。但在您调用 getUserSnap 时,该用户尚未加载。

最简单的解决方案是将所有需要用户访问的代码移到 onDataChange() 方法中。另请参阅我对这个问题的回答以获得更灵活的解决方案,这需要更多代码:getContactsFromFirebase() method return an empty list

关于android - Activity 之外的 Firebase 数据库 EventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com