android 我如何存储两个关键使用推在实时数据库?

6l7fqoea  于 2023-01-03  发布在  Android
关注(0)|答案(1)|浏览(129)

对不起,如果我太活跃这些天,但我必须部署一个项目在一周内,我卡住了。我有一个双推的问题,以存储数据在实时数据库与Kotlin。请看图片。我需要存储两个关键值,但是我需要使用两次推送来生成新的孩子。我知道如何保存其中一个键,但不能同时保存两个。我用散列表创建日期,保存后,其中一个键没有正确存储,只是一个随机值。有什么建议吗?

    • 编辑:**

所以我真正的问题是comentarioID = referenciaBD. push(). key!!. toString()存储了一些我不需要的键。请看图片,我不知道如何用英语更好地表达

你可以在这里看到我的函数来存储数据:

private fun guardarComentario (uidPostRecibido:String) {
        val comentarioMap = HashMap<String, Any>()
        referenciaBD = FirebaseDatabase.getInstance().reference.child("Comentarios").child(uidPostRecibido)
        comentarioID = referenciaBD.push().key!!.toString()
        print(comentarioID)
        comentarioMap["comentarioID"]= comentarioID
        comentarioMap["publicacionID"]= uidPostRecibido
        comentarioMap["contenido"] = binding.etComentario.text.toString()
        comentarioMap["creadoPor"] = FirebaseAuth.getInstance().currentUser!!.uid
        comentarioMap["fecha"] = LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))
        referenciaBD.push().setValue(comentarioMap).addOnCompleteListener() { task ->
            if (task.isSuccessful) {
                Toast.makeText(context,"COMENTARIO GUARDADO EN LA BASE DE DATOS CON EXITO",Toast.LENGTH_SHORT).show()
                anadirNotifcacion(uidPostRecibido)
                binding.etComentario.setText("")
            } else {
                Toast.makeText(context, "ERROR GUARDANDO EN LA BD", Toast.LENGTH_SHORT).show()
            }
        }
    }
3mpgtkmj

3mpgtkmj1#

如果需要将两个按下的键保存到单个字段中,则可以创建如下所示的串联:

db-root
 |
 --- Comentarios
       |
       --- -NKoX...qEQe
             |
             --- -NKr6..._dyP
                   |
                   --- comentarioID: "-NKr6..._dyO::-NKr6..._dyP"
//                                                👆

这个解决方案用于在同一个String类型字段中保存两个值,现在,要获取两个ID的值,必须读取::分隔符左侧的值,然后读取右侧的值。
或者,可以将值保存在数组类型的字段中:

db-root
 |
 --- Comentarios
       |
       --- -NKoX...qEQe
             |
             --- -NKr6..._dyP
                   |
                   --- comentarioID: ["-NKr6..._dyO", "-NKr6..._dyP"]

另一种解决方案是将两个值都存储在Map中:

db-root
 |
 --- Comentarios
       |
       --- -NKoX...qEQe
             |
             --- -NKr6..._dyP
                   |
                   --- comentarioIDs (map)
                         |
                         --- "-NKr6..._dyO": true
                         |
                         --- "-NKr6..._dyP": true

无论你选择哪种解决方案,你都必须在comentarioMap中根据字段的类型来设置字段,所以它可以是String、List或Map〈String,Any〉。

    • 编辑:**

根据你最后的评论:
我需要在comentarioid中存储以.... dyp结尾的密钥,但它开始存储以.... dyo结尾的内容
发生这种情况是因为你调用了push()两次,如果你想存储完全相同的密钥,那么不要使用:

referenciaBD.push().setValue(comentarioMap).addOnCompleteListener() {}
//            👆

删除push()并使用之前生成的comentarioID

referenciaBD.child(comentarioID).setValue(comentarioMap).addOnCompleteListener() {}
//                  👆

相关问题