在firebase(JAVA)中插入一个字符串变量作为键(子)

Posted

技术标签:

【中文标题】在firebase(JAVA)中插入一个字符串变量作为键(子)【英文标题】:Insert a string variable as a key (child) in firebase (JAVA) 【发布时间】:2020-03-24 21:29:53 【问题描述】:

我已经阅读了 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 在表 'connections' 内创建一个新节点,在此节点内创建一个子属性 'abc@example.com' 并将值设置为 true。像这样-

\connections
  -uid
   -abc@example.com: true

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

【问题讨论】:

【参考方案1】:

您无法将用户的电子邮件地址作为密钥保存在 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 永远不会更改,而用户可能会更改电子邮件地址,不幸的是,您不能简单地更改密钥的名称。

【讨论】:

以上是关于在firebase(JAVA)中插入一个字符串变量作为键(子)的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase 中插入 JSON 显示为字符串,而不是显示为树

使用 java 和 sql INSERT Query 在 MS 访问中插入字符串类型变量和日期类型变量

使用 android studio java Recycler 视图从 Firebase 实时数据库中删除一个节点

JAVA在数据库中插入日期,日期由字符串变量传递值,占位符?要用单引号吗,怎么写?

java在插入之前获取SQL下一个记录的序列号

如何创建用户名,然后使用 Firebase 与用户插入/关联数据