为什么会发生这种错误?在调试模式下,键中没有特殊字符,没有“.”,只有路径所需的“/”。它工作得很好,我只是擦了擦我的数据库,然后我再次运行在标题中的错误。我的代码:
databasereference databasereference=firebasedatabase.getinstance().getreference();
String animalUid = animal.getUid();
if (animalUid == null) {
animalUid = databaseReference.push().getKey();
}
Map<String, Object> animalData = new HashMap();
if(animal.getFavorites()!=null) {
for (Map.Entry<String, Boolean> entry : animal.getFavorites().entrySet()) {
animalData.put("users-favorites-animals/" + entry.getKey() + "/" + animalUid, animal);
}
}
animalData.put("users-animals/" + animal.getOwnerUid() + "/" + animalUid, animal);
animalData.put("animals/" + animalUid, animal);
databaseReference.updateChildren(animalData).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
listener.onSaveAnimalSucess(animal);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
if (e instanceof FirebaseException) {
listener.onSaveAnimalError("");
return;
}
listener.onConnectionError();
}
});
以下是animaldata键在updatechildren之前的用法:
“动物/-kcd tif5epyuhsceeh”
“用户动物/loq9bkjs2yvc95nfgyo1ft4cqb2/-kcd tif5epyuhsceeh”
即使我的旧代码没有多个数据更新也无法工作,出现了同样的错误。我不知道发生了什么事。
最佳答案
不确定这是否有帮助,但我正在使用一些组件来调节我的个人对象:d(例如,priming autoselect box在我的数据中添加了类似于'u$visited'的内容)。
如果有人面临同样的问题,并且在您的对象中不需要这些类型的键,您可以考虑调用以下函数。(你需要有洛达斯)
private makeObjectGreatAgain(object: any) {
// removing undefined values from any arrays!
// and some variables which are added by different components
// firebase not allowed keys: ".", "#", "$", "/", "[", or "]"
object = JSON.parse(JSON.stringify(object), (key, val) => {
if (!_.includes(key, '.') && !_.includes(key, '#') && !_.includes(key, '$') &&
!_.includes(key, '/') && !_.includes(key, '[') && !_.includes(key, ']')) {
return val;
} else {
console.log('removing invalid key: ' + key + ' val: ' + val);
}
});
return object;
}
关于android - Firebase无效 key :。 key 不得包含'/','。','#','$','['或']',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42166144/