2016-10-13 4 views
2

Ich versuche, ein neues Kind mit der DatabaseReference in meiner Firebase Android App hinzuzufügen. Ich tue:Hinzufügen eines neuen Kindes in der Firebase-Datenbank Android

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference() 
mDatabase.child("childToAdd").setValue(1); 

ich dies mit einer regelmäßigen Firebase Referenz tun kann, wie es das Kind zur Datenbank hinzufügen würde, wenn sie nicht da sind.
Wie könnte ich das mit DatabaseReference machen?

Bearbeiten: Danke für alle Vorschläge, aber ich habe Probleme mit dem folgenden Code. Wenn es den if-Block betritt, werden die Daten nicht auf die Datenbank übertragen.

https://gist.github.com/rounaksalim95/a5cba332400c6caf8320f15b0cbf06e8

Wenn ich das versuchen mit der alten Firebase Referenz erhalte ich Fehlercode 11 (Benutzercode von Feuerbasis Runloop genannt) und mit der neuen Datenbankreferenz erhalte ich Fehlercode -3 (PermissionDenied obwohl ich nicht haben Sicherheitsregeln).

Update:

habe ich es zu tun, was ich mit einem einzigen Wert Ereignis-Listener wollte:

Firebase userRef = new Firebase(BASEURL + "userData"); 

userRef.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.child(user.getUid()).getValue() == null) { 
      userRef.child(user.getUid()).setValue(1); 
     } 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 

jedoch Datenbankreferenz nicht lassen Sie mich wie diese Werte hinzufügen.

+0

Es tut mir leid, dass ich Sie Frage falsch verstanden haben kann, aber ist 'mDatabase' eine' DatabaseReference'? Die 'getReference()' Methode gibt 'DatabaseReference' zurück –

Antwort

11

Sie müssen push() rufen einen eindeutigen Schlüssel für die neuen Daten zu generieren:

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference() 
mDatabase.push().setValue(1); 

Dies wird den neuen Wert am Ende der Liste anhängen.

Durch die push() und child() Methoden kombinieren, können Sie mehrere Listen von Kindern in der Datenbank erstellen:

mDatabase.child("numbers").push().setValue(1); 
mDatabase.child("numbers").push().setValue(53); 
mDatabase.child("numbers").push().setValue(42); 

mDatabase.child("letters").push().setValue("a"); 
mDatabase.child("letters").push().setValue("z"); 
mDatabase.child("letters").push().setValue("c"); 

den Abschnitt append to a list of data in der Firebase-Dokumentation.

+1

Danke für den Vorschlag! Ich habe jedoch mehr Probleme damit, da die Transaktion den Wert in der Datenbank nicht zu aktualisieren scheint (Bearbeitung zu Frage hinzugefügt). – Ron7

+0

@Frank van Puffelen Wie kann ich ein verschachteltes Kind in der Firebase-Datenbank hinzufügen? –

0

Im folgenden Code füge ich ein Kind mit dem Namen deepak zu meiner Datenbank hinzu und füge dann wieder ein Kind hinzu, das eine Liste mit Namensliste enthält. Durch deinen Code schätze ich, dass du bereits weißt, wie man ein Kind in die Datenbank einfügt, du bist nur ein bisschen verwirrt.

private DatabaseReference childRef; 
private DatabaseReference listRef; 

databaseReference = FirebaseDatabase.getInstance().getReference(); 
childRef = databaseReference.child("deepak"); 
listRef = childRef.child("list"); 
listRef.setValue(callList); 
0

Überprüfen Sie dieses Beispiel, es kann Ihnen helfen.

 public class FirebaseUserDetails 
    { 
    private String mDisplayName; 
    public String getmDisplayName() { 
     return mDisplayName; 
    } 
public void setmDisplayName(String mDisplayName) { 
    this.mDisplayName = mDisplayName; 
} 
} 

Ihren Wert für Feuerbasis Datenbank hinzufügen,

FirebaseUserDetails firebaseUserDetails = new FirebaseUserDetails(); 
firebaseUserDetails.setmDisplayName("arunwin"); 
DatabaseReference pathReference = FirebaseDatabase.getInstance().getReference().child("contacts"); 
pathReference.child("arun").setValue(firebaseUserDetails).addOnCompleteListener(new OnCompleteListener<Void>() { 
    @Override 
    public void onComplete(@NonNull Task<Void> task) { 

    } 
}); 

Und Ihr Ergebnis Wert wird in der Datenbank wie unten hinzugefügt werden,

contacts: 
    arun: 
     mDisplayName:"arunwin" 
0

Sie nichts in die Datenbank hinzufügen können, wenn Du bist nicht autorisiert.Sie können einen der folgenden Schritte aus:

Entweder auf Ihre Registerkarte Regeln in Feuerbasis Konsole eingestellt:

{ 
"rules": { 
".read": true, 
".write": true 
} 
} 

Oder Sie eine Authentifizierungs erste (versuchen Sie mit E-Mail/pass) und erstellen Benutzer mit

erstellen müssen
createUserWithEmailAndPassword(email, password) 

und melden Sie sich dann mit:

signInWithEmailAndPassword(email, password) 

und Sie müssen Anmelde-wi ermöglichen th E-Mail/Pass auch in Ihrer Konsole.

Und dann können Sie Daten in Ihre Datenbank schreiben.

+0

Danke für die Antwort. Ich habe jedoch keine Authentifizierungsregeln eingerichtet und der Benutzer ist ordnungsgemäß angemeldet. Das ist das Benutzerobjekt, das ich im Codeblock verwende. – Ron7

+0

können Sie es mit Push() tun ?? –

+0

Oder versuchen Sie mDatabase.child ("childToAdd"). SetValue ("1"); –

2

Ein weiterer Beitrag erwähnte Ihre gradle App-Datei überprüfen Sie die neueste Version der Firebase haben, um sicherzustellen, wie folgt:

compile 'com.google.firebase:firebase-core:10.0.1' 
compile 'com.google.firebase:firebase-database:10.0.1' 

Ich denke, das viele Probleme beheben soll, die von der Verwendung ältere Versionen entstehen könnte.

Ich hoffe, das hilft.

1

Verwenden Sie push() vor dem eingestellten Wert in der Firebase. Es erstellt jedes Mal neue Benutzer, wenn Sie Wert in der Datenbank senden.

Verwandte Themen