2016-04-06 10 views
2

Ich verwende diesen Code, um neue Elemente zu Firebase auf Android hinzuzufügen. Wenn jedoch jemand versucht, einen anderen Gegenstand mit demselben Schlüssel hinzuzufügen, wird der aktuelle Gegenstand ersetzt! Wie kann ich das verhindern? Ich meine wie normale Datenbank; Ich möchte Schlüssel als meine primären Schlüssel verwenden und darf kein Element mit dem gleichen Schlüssel hinzugefügt werden (oder ein anderes vorhandenes Element zu ersetzen)So verhindern Sie das Hinzufügen von Daten zu Firebase, wenn der Schlüssel vorhanden ist

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

    } 
}); 

Ich will nicht Push() verwenden, obwohl da die Schlüssel haben in meiner app Sinn und ich möchte es halten Einzigartigkeit

+0

Siehe http://stackoverflow.com/questions/25294478/how-do-you-prevent-duplicate-user-properties-in-firebase. Während diese Antwort für JavaScript ist, ist der Ansatz der gleiche für jedes Firebase SDK –

Antwort

0

ich denke, Sie einen Primärschlüssel selbst durch definieren können, oder überprüfen Sie existieren Schlüssel vor Wert von Methode hinzufügen:

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

verwenden runTransaction, die eine ist atomare Operation, um sicherzustellen, dass keine Schlüssel überschrieben werden. Sie können sich auf this answer zur Verwendung von runTransaction beziehen. Unten ist eine Beispielantwort

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

. Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/11916720) – piotrek1543

+0

Noch ziemlich neu in StackOverflow. Ich habe es mit einem Beispiel bearbeitet – Viven

1

Versuchen Sie es.

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) { 

      } 
     }); 
Verwandte Themen