【问题标题】:how can read from Firebase Real Time without using addChildEventListener如何在不使用 addChildEventListener 的情况下从 Firebase 实时读取
【发布时间】:2022-01-15 21:16:49
【问题描述】:

在我登录应用程序时 需要通过 UID 从实时数据库中获取用户配置文件

在文档中必须使用 addValueEventListener 从 RealTime DB 中读取

//如果我有 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")
            }
        })
    }

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    如果您想从您的数据库中读取某个特定用户的数据,您可以通过using a query 进行操作。

    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) {
                ...
    

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

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多