Firebase无效密钥:。密钥不得包含' /','。','#',' $',' [& #39;,或']'

时间:2017-02-10 18:19:35

标签: android firebase

为什么会发生这种错误?在调试模式中,键中没有特殊字符,没有'。'只有' /'路径所必需的。它工作得很好,我只是擦了我的数据库,然后我再次运行标题中的错误。我的代码:

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();
    }
});

这里是如何在updateChildren之前出现animalData键:

&#34;动物/ -Kcd_8Tif5EPYUhsceeH&#34;

&#34;用户 - 动物/ LoQ9Bkjs2yVC95nFGyo1ft4cqdB2 / -Kcd_8Tif5EPYUhsceeH&#34;

即使我没有多数据更新的旧代码也无法正常工作,但错误相同。我不知道发生了什么。

1 个答案:

答案 0 :(得分:1)

不确定这是否会对您有所帮助,但我使用的是一些与我的个人物品发脾气的组件:D(例如,primeng自动选择框会为我的数据添加类似于&#39; _ $ visited&#39;的内容)。 如果有人面临同样的问题并且您的对象中并不真正需要这些键,您可以考虑调用以下函数。 (你需要为它做lodash)

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;
}