Android Kotlin写入Firebase时出现"Invalid key"错误求助
解决Firebase Realtime Database写入时的Invalid Key错误
先直接说清问题根源:你遇到的DatabaseException: Invalid key错误,是因为你尝试使用的键名包含了Firebase Realtime Database明确禁止的字符——具体到你的情况是.,另外/, #, $, [, ]这些字符也都不能出现在键里。
关于你问的「是否需要自行添加键」,分两种情况来看:
情况1:想让系统自动生成唯一键(推荐用于列表类数据)
Firebase确实支持自动生成合法的唯一键,但需要用push()方法触发这个功能,而不是直接指定键名。比如你可以这样写:
// 获取数据库根引用 DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference(); // 用push()生成自动键,然后写入数据 dbRef.child("your_data_node").push().setValue(yourDataObject);
调用push()后,Firebase会自动生成类似-NxXyz123abc...这样的唯一合法键,完全不会出现字符违规的问题,非常适合存储列表形式的数据(比如用户提交的多条记录)。
情况2:需要自定义键名
如果业务逻辑必须用自定义键(比如用用户ID作为键),那你必须确保键名不包含任何禁止的字符。比如你原本想用user.name当键,就得改成user_name、username或者其他不含禁用字符的名称:
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference(); // 使用合法的自定义键名 dbRef.child("users").child("user_name").setValue(userData);
排查小技巧
你可以检查代码里调用child()方法时传入的参数,看看是不是不小心传入了带.或者其他禁用字符的字符串——比如可能是从用户输入、设备信息里获取的字符串本身包含这些字符,这时候要么替换掉禁用字符,要么改用push()自动生成键。
内容的提问来源于stack exchange,提问作者user3718236
相关产品推荐
相关产品推荐

