代码之家  ›  专栏  ›  技术社区  ›  Joshu

一旦获得实时火情基准值,就进行处理

  •  0
  • Joshu  · 技术社区  · 2 年前

    对于我的下一个应用程序,它需要大量的云阅读/写入firebase。现在获取有关我使用的用户配置文件的信息。

    myRef.child(userid).child("UserName").get().addOnSuccessListener {
                Log.i("firebase", "Got value ${it.value}")
                //what I need to do with the value
            }.addOnFailureListener {
                Log.e("firebase", "Error getting data", it)
            }
    
    myRef.child(userid).child("Bio").get().addOnSuccessListener {
                Log.i("firebase", "Got value ${it.value}")
                //what I need to do with the value
            }.addOnFailureListener {
                Log.e("firebase", "Error getting data", it)
            }
    //so on for all my values
    

    所以我想知道,因为所有数据都存储在同一个路径下,“userid”是用户的ID,如果我能从该部分获取所有数据,然后过滤它为每个部分返回的数据的哈希图。我试过了-

            myRef.child(userid).get().addOnSuccessListener {
                Log.i("firebase", "Got values ${it.value}")
            }.addOnFailureListener {
                Log.e("firebase", "Error getting data", it)
            }
    

    这将返回以下格式的所有数据: Got values {UserName=Joshu, Bio=I am joshu, the creator of this app, Gender=Male, Age=15}

    我的问题是,我如何分割这些数据,以便在我的应用程序中用于文本视图?

    我以前尝试过:

    val userData = document.data?.values 
          ?.filterIsInstance<String>()
    

    但这仍然返回一个值列表(如- [Joshu, I am joshu, the creator of this app, Male, 15] )我发现无论如何都很难使用。

    0 回复  |  直到 2 年前
        1
  •  1
  •   Alex Mamo    2 年前

    当您为用户请求完整节点时 it DataSnapshot object it.value 将是 Map<String, Object> 以及该节点下的所有属性。

    所以你可以使用 it.value get the property 您需要从该字典中,或者您可以使用内置的 child method 以获取正确的子项,然后调用 value 关于这一点。

    未经测试,但第一种方法应该是这样的:

    myRef.child(userid).get().addOnSuccessListener {
        Log.i("firebase", "Got value: "+(it.value as Map<String, Object>).getValue("UserName"))
    }.addOnFailureListener {
        Log.e("firebase", "Error getting data", it)
    }
    

    或者这是第二种方法

    myRef.child(userid).get().addOnSuccessListener {
        Log.i("firebase", "Got value: "+it.child("UserName").value)
    }.addOnFailureListener {
        Log.e("firebase", "Error getting data", it)
    }