Firebase数据库中一个孩子中有多个字符串

时间:2019-05-19 02:38:32

标签: firebase firebase-realtime-database kotlin hashmap

我与Firebase一起工作了几个月,到目前为止,到目前为止我还没有任何问题。即时通讯使用科特林,我的问题很简单,但我找不到出路。我将字符串存储在数据库中:path“ / user / friends”,但是我无法更改变量名,并且字符串覆盖了它自己。我的解决方案是使用“ push()”直到“ setValue()”,但与此同时,我具有以下firebase结构:

"users": {
    "yvrYpjMwVSPBvMAvDGo26hPlWWQ2": {
        "email": "vinibarros.sp@gmail.com",
        "friends": {
            "-LfD9z6ke7FXFjxUb4td": {
                "email": "teste@gmail.com"
            },
            "-LfDA-NaAYAMoWiPhXy4": {
                "email": "teste2@gmail.com"
            }
        },
        "primeiroLogin": true,
        "stars": 0,
        "tutorialComplete": false,
        "uid": "yvrYpjMwVSPBvMAvDGo26hPlWWQ2",
        "username": "Vinicius Barros"
    }
}

基本上是散列表ps:lol mindblow中的散列表

如何将pushcode.value放入数组列表中?

我有一个具有user变量的类用户,直到现在此变量的类型为hashMap。而获取电子邮件的电话是“ user.friends.value”

之所以奏效是因为是一个朋友。...

  

com.google.firebase.database.DatabaseException:无法将类型java.util.HashMap的值转换为String

当我添加多个用户时,出现此错误,该错误引用了我的类用户,该用户具有“ hashMap”。但是firebase给了我另一个哈希图,而不是字符串。我在想:hashMap<hashMap<String,String>, null>

我已经尝试过:

班上朋友:

@Parcelize
class Friend(val hashMap: HashMap < String, String > ? ): Parcelable {
    constructor(): this(null)
}

我向朋友展示的活动:

val ref2 = FirebaseDatabase.getInstance().getReference("/users/" + cUid + "/friends/")
ref2.addListenerForSingleValueEvent(object: ValueEventListener {
    override fun onCancelled(p0: DatabaseError) {

    }
    override fun onDataChange(p0: DataSnapshot) {
        p0.children.forEach {
            val friend = it.getValue(Friend::class.java)
            Log.d("teste", it.toString())
            if (friend != null) {
                Log.d("teste", friend.hashMap ? .values.toString())
                //friends.add(friend.hashMap?.values.toString())
            }
        }

    }

})

这总是返回null。...

2 个答案:

答案 0 :(得分:0)

在您的Friend类中,Firebase客户端使用以下结构为每个朋友查找JSON:

"-LfD9z6ke7FXFjxUb4td": {
    "hashMap": {
        ...
    }
},

这是因为您正在使用属性Friend来定义hashMap类,例如:class Friend(val hashMap: HashMap < String, String > ? )

要阅读当前结构,您需要定义一个data class,如下所示:

data class Friend (
    val email: String? = null
}

现在email类中的Friend与JSON中的email属性匹配。而且由于email具有默认值,因此Friend类将具有Firebase依赖的默认无参数构造函数。

答案 1 :(得分:0)

解决了!

进入/ friends之后 我这样做了:

 var friends : ArrayList<String> = arrayListOf()

我在其中得到字符串朋友的onDataChanged

     override fun onDataChange(p1: DataSnapshot) {
                                          p1.children.forEach { it1 ->
                                              val friend = it1.value as String

                                                  friends.add(friend)


                                          }
                                      }