Firebase实时数据库android java
有人能回答我的问题吗:为什么我不能像这样在root中创建child:Firebase实时数据库android java,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,有人能回答我的问题吗:为什么我不能像这样在root中创建child: mDatabase.child("teams").child(uniqueIDstr).child("members").child(currentUser.getEmail()).setValue("XD"); 因为这样的东西工作正常: mDatabase.child("users").child(currentUser.getUid()).c
mDatabase.child("teams").child(uniqueIDstr).child("members").child(currentUser.getEmail()).setValue("XD");
因为这样的东西工作正常:
mDatabase.child("users").child(currentUser.getUid()).child("groups").child(uniqueIDstr).setValue("group");
问题出在这个调用
child(currentUser.getEmail())
中。电子邮件地址始终至少包含一个
,Firebase实时数据库中的密钥中不允许使用该字符。当您运行非常明确地告诉您这一点的代码时,实际上应该会收到一条错误消息
常见的解决方案是对电子邮件地址进行“编码”,例如,通过删除电子邮件地址中的
,或将每个
更改为,
。后者是一个巧妙的技巧,因为,
不允许出现在电子邮件地址中,而允许出现在实时数据库密钥中。问题在于调用子对象(currentUser.getEmail())
。电子邮件地址始终至少包含一个
,Firebase实时数据库中的密钥中不允许使用该字符。当您运行非常明确地告诉您这一点的代码时,实际上应该会收到一条错误消息
常见的解决方案是对电子邮件地址进行“编码”,例如,通过删除电子邮件地址中的
,或将每个
更改为,
。后者是一个巧妙的技巧,因为,
不允许出现在电子邮件地址中,而允许出现在实时数据库键中。不清楚问题可能是什么,因为我们看不到此处显示的变量的任何值。您可以先记录这些字符串的值,然后再使用它们,然后显示日志,这样我们就可以了解哪些字符串没有按照您期望的方式工作。另外,这里的代码没有检查调用setValue时的错误,因此可能出现了问题,但您永远不会知道。不清楚问题可能是什么,因为我们看不到您在这里显示的变量的任何值。您可以先记录这些字符串的值,然后再使用它们,然后显示日志,这样我们就可以了解哪些字符串没有按照您期望的方式工作。此外,这里的代码没有检查调用setValue时的错误,因此可能会出现问题,但您永远也不会知道。