在 Firebase (JAVA) 中插入字符串变量作为键(子项)



我已经浏览了Firebase的官方文档,但我仍然对如何将字符串变量作为子变量插入并设置该子变量的值感到困惑。我需要密钥是动态的。目前,我正在尝试实现这一点 -

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
String email = "abc@example.com";
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dbRef = database.getReference("connections").child(uid);
dbRef.child(email).setValue("true");

理想情况下,这应该在具有当前 uid 的表"连接"中创建一个新节点,在此节点内创建一个子属性"abc@example.com"并将值设置为 true。喜欢这个-

connections
-uid
-abc@example.com: true

我已经尝试过这个,但它失败了。谁能指出我的错误并纠正它?

您无法将用户的电子邮件地址保存为 Firebase 实时数据库中的密钥,因为它包含禁止的字符,例如.。如果您仍然想使用电子邮件地址,我建议您像这样编码:

name@email.com -> name@email,com

正如您可能看到的,我用,而不是..为此,您可以使用以下方法:

static String encodeUserEmail(String userEmail) {
return userEmail.replace(".", ",");
}
static String decodeUserEmail(String userEmail) {
return userEmail.replace(",", ".");
}

但是,更合适的方法是使用来自身份验证过程的uid。主要好处是uid永远不会更改,而用户可能会更改电子邮件地址,不幸的是,您不能简单地更改密钥的名称。

最新更新