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

如何在不使用addChildEventListener的情况下实时读取Firebase

谷越
2023-03-14

在我的情况下,登录应用程序时需要通过UID从realTime Database获取用户配置文件

在文档中必须使用添加值事件通知程序才能从实时数据库读取

//如果我有obj的id,如何直接从实时firebase获取值

fun loginByEmail(email: String, password: String) {
        firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener { task ->
            if (task.isSuccessful) {
                getUserValueFromDB(firebaseAuth.currentUser!!.uid, email)
            }

        }
    }

//我的问题是,这里不能使用这种方法

private fun getUserValueFromDB(uid: String, email: String) { //todo
        databaseReference.child("Users").addValueEventListener(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {
                for (snap in snapshot.children) {
                    var data = snap.getValue(User::class.java)
                    if (data?.id == uid) {
                        prefs.userImage = data.image!!
                        GlobalScope.launch {
                            _loginStatus.emit(true)
                        }
                    }
                }
            }
            override fun onCancelled(error: DatabaseError) {
                TODO("Not yet implemented")
            }
        })
    }

共有1个答案

须峰
2023-03-14

如果希望从数据库中读取某个特定用户的数据,可以使用查询来实现。

private fun getUserValueFromDB(uid: String, email: String) {
    var query = databaseReference.child("Users").orderByChild("id").equalTo(uid)
    query.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {
            ...

您的代码的其余部分可以保持不变,您只需加载少得多的数据。

 类似资料:
  • 问题内容: 我已经在Swift 2中使用了这种方法 但是不知道如何在不使用 NSDictionary(contentsOfFile:path)的* 情况下在Swift3中读取plist * 问题答案: Swift的本机方法是使用 ~~~~ 您还可以使用类型强制转换: 但您明确地写道: 不使用NSDictionary(contentsOf … 基本上,不要在Swift中不进行强制转换而使用,您将丢弃

  • 问题内容: 我必须用Java读取CSV文件,我用Google对其进行了搜索,但是我有办法使用标题进行读取;但我没有文件中可用的列标题和列数的信息。在这种情况下,我该如何读取CSV文件。 谢谢 问题答案: 您可以假设每一行都是String类,并将所有内容读取到二维数组中。之后,您可以尝试将字符串解析为适当的格式。 但是,如果您不知道行数据类型,这只是一个猜测。

  • 我是说 现在我可以得到这个房间的孩子了,但是我想知道是否有一种方法可以使用来完成同样的事情。

  • 问题内容: 如果我要使用DefaultServeMux(我将其指定为ListenAndServe的第二个参数来指定),那么我可以访问,您可以在Go Wiki的以下示例中看到该: 在当前代码中,我无法使用DefaultServeMux,即我将自定义处理程序传递给ListenAndServe 因此,我没有内置的代码。但是,我必须将一些授权代码修改为需要类似的授权代码。例如,如果我一直在使用Defaul

  • 问题内容: 我正在解决Programming Pearls,第二版,第1列中的问题。其中一个问题涉及编写一个程序,该程序仅使用大约1 MB的内存将文件内容存储为位数组,每个位代表是否或文件中没有7位数字。由于Java是我最熟悉的语言,因此即使作者似乎已经想到了C和C ++,我还是决定使用它。 由于我是为了解决我正在处理的问题而假装有限的内存,因此我想确保读取文件的过程完全没有缓冲。 在我阅读Jav

  • 问题内容: 建立一个社交网络,我正在尝试获取实时通知。当前,站点使用setInterval每隔几秒钟发送一次AJAX请求。看起来像这样: 那很好,但是我非常担心创建服务器过载。我尝试了彗星技术,但由于某种原因,它发送的请求比上述代码多得多。还有其他更有用的技术来实时发布此数据吗? 编辑:为实现长轮询,我使用了以下内容(使用此处提到的示例:http : //techoctave.com/c7/pos