2017-02-10 6 views
3

このエラーはなぜ発生しますか?デバッグモードでは、キーに特殊文字はありません。 '。'はなく、パスに必要な '/'だけです。それはうまくいきました。データベースを一掃しただけで、タイトルのエラーで再度実行します。私のコード:

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_8Tif5EPYUhsceeH"

"ユーザー-動物/ LoQ9Bkjs2yVC95nFGyo1ft4cqdB2/-Kcd_8Tif5EPYUhsceeH"

も、私の古いコード同じエラーで、複数のデータの更新が機能しません。私は何が起こっているのか分かりません。

+3

キーは/を含んではいけません。ここではっきりしないことは何ですか? –

+1

これは鍵ではありませんが、これはfirebaseがサポートする深いパスですが、古いfirebaseのバージョンとしてkeyを呼び出し続けます。なぜhttps://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html –

+1

の古いバージョンのfirebase(Android(2.4.0))からブログを読んでいるのですか? )。最新のバージョンは10.0.xです。最新のAPIを確認してください –

答えて

0

これはあなたには役立ちますかどうかわかりませんが、私の個人的なオブジェクトで気分が悪いいくつかのコンポーネントを使用しています:D(例えば、primengの​​自動選択ボックスは、 '_ $ visited'のようなものをデータに追加します)。 誰かが同じ問題に直面していて、あなたのオブジェクトにこれらの種類のキーが本当に必要でない場合は、次の関数を呼び出すことを検討してください。 (あなたはそれのために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; 
} 
関連する問題