2016-04-06 11 views
2

このコードを使用して、Android上で新しいアイテムをFirebaseに追加しています。ただし、誰かが同じキーを持つ別のアイテムを追加しようとすると、現在のアイテムが置き換えられます!これを防ぐ方法を教えてください。私は定期的なデータベースのような意味です。私は、キーを持っているので、私はかかわらず)(プッシュを使用したくないキーが存在する場合、Firebaseにデータを追加しないようにする方法

myFirebaseRef.child(key).setValue(item, new Firebase.CompletionListener() 
{ 
    @Override 
    public void onComplete(FirebaseError firebaseError, Firebase firebase) 
    { 

    } 
}); 

私の主キーとしてキーを使用し、同じキーを持つ任意の項目を追加することを許可しない(または、別の既存のアイテムを置き換えるために)したいです私のアプリでは意味、私は自分自身を定義することにより、主キーを使用するか、または確認することができ、私は思うが一意

+0

http://stackoverflow.com/questions/25294478/how-do-you-prevent-duplicate-user-properties-in-firebaseを参照してください。その答えはJavaScriptのためのものですが、アプローチはすべてのFirebase SDKで同じです –

答えて

0

を維持したいキーは前の方法で値を追加存在:

Firebase fb = myFirebaseRef.child(key); 
if(fb == null){ 
    //it means the child is not exist 
} 
else{ 
    //it means the child is existing 
} 
1

使用runTransactionありますキーのオーバーライドがないことを確認するためのアトミック操作です。 runTransactionの使用方法については、this answerを参照してください。以下はサンプル回答です

firebaseRef.child("uniquekeys").child(uniqueKey).runTransaction(new Transaction.Handler() { 
     @Override 
     public Transaction.Result doTransaction(MutableData mutableData) { 
      if (mutableData.getValue() == null) { 
       mutableData.setValue(value); 
       return Transaction.success(mutableData); 
      } 

      return Transaction.abort(); 
     } 

     @Override 
     public void onComplete(FirebaseError firebaseError, boolean commited, DataSnapshot dataSnapshot) { 
      if (commited) { 
       // unique key saved 
      } else { 
       // unique key already exists 
      } 
     } 
    }); 
+0

このリンクは質問に答えるかもしれませんが、ここに答えの重要な部分を含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 11916720) – piotrek1543

+0

まだStackOverflowにはかなり新しいです。私は例を使って編集しました – Viven

1

お試しください。

myFirebaseRef.child(key).addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       if (dataSnapshot.getValue() == null) { 
       //does not exists 
       } else { 
       //exists 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
関連する問題