如何用push在Firebase实时数据库存储两个键?Kotlin问题求助
问题解决:Firebase实时数据库push key不匹配的问题
你的代码核心问题是调用了两次push()方法:
- 第一次
referenciaBD.push().key生成了一个随机key并赋值给comentarioID - 第二次
referenciaBD.push().setValue(comentarioMap)又生成了全新的随机key,这才是实际存储数据的节点key
两次push()会生成不同的随机key,自然导致存储的节点key和comentarioID不一致。解决办法是只调用一次push(),保存生成的引用后复用:
private fun guardarComentario(uidPostRecibido: String) { val comentarioMap = HashMap<String, Any>() val comentariosRef = FirebaseDatabase.getInstance().reference.child("Comentarios").child(uidPostRecibido) // 仅调用一次push(),获取包含唯一key的引用 val nuevoComentarioRef = comentariosRef.push() val comentarioID = nuevoComentarioRef.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")) // 使用同一个引用执行存储操作,保证key一致 nuevoComentarioRef.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() } } }
修改说明:
- 先通过一次
push()获取nuevoComentarioRef,这个引用绑定了唯一的随机key - 从该引用中提取
key赋值给comentarioID - 最终用同一个引用调用
setValue(),确保存储的节点key与comentarioID完全匹配
内容的提问来源于stack exchange,提问作者Monrac
相关产品推荐
相关产品推荐

