web-dev-qa-db-fra.com

Comment ajouter un nouvel enfant dans la base de données Firebase Android

J'essaie d'ajouter un nouvel enfant à l'aide de la DatabaseReference dans mon Firebase application Android. Je fais: 

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

Je peux le faire avec une référence Firebase régulière, car cela ajouterait l'enfant à la base de données s'il n'y en avait pas.
Comment pourrais-je m'y prendre avec DatabaseReference

Edit: Merci pour toutes les suggestions, mais je rencontre des problèmes avec le code suivant. Lorsqu'il entre dans le bloc if, il n'enfonce pas les données dans la base de données. 

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

Lorsque j'essaie cela avec l'ancienne référence Firebase, je reçois le code d'erreur 11 (code d'utilisateur appelé à partir de firebase runloop) et avec la nouvelle référence de base de données, le code d'erreur -3 (PermissionDenied, même si je n'ai pas de règles de sécurité). 

Mettre à jour:

Je l'ai fait faire ce que je voulais en utilisant un écouteur d'événement à valeur unique: 

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

    }
});  

Cependant, la référence à la base de données ne me laisse pas ajouter de telles valeurs. 

8
Ron7

Vous devez appeler Push() pour générer une clé unique pour les nouvelles données:

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

Cela va ajouter la nouvelle valeur à la fin de la liste.

En combinant les méthodes Push() et child(), vous pouvez créer plusieurs listes d'enfants dans la base de données:

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");

Voir la section ajouter à une liste de données dans la documentation de Firebase.

20
Frank van Puffelen

Un autre article a été mentionné pour vérifier votre fichier d'application Gradle afin de vous assurer que vous disposez de la dernière version de Firebase, comme suit:

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

Je pense que cela devrait résoudre de nombreux problèmes liés à l'utilisation d'anciennes versions.

J'espère que ça aide.

2
seansanders

Vous ne pouvez rien ajouter à la base de données si vous n'êtes pas autorisé. Vous pouvez effectuer l’une des opérations suivantes:

Définissez ceci sur l’onglet Règles de la console Firebase:

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

Ou vous devez d'abord créer une authentification (essayez avec email/pass) et créer un utilisateur avec 

createUserWithEmailAndPassword(email, password)

et ensuite vous connecter avec:

signInWithEmailAndPassword(email, password)

et vous devez également activer la connexion avec email/pass dans votre console.

Et ensuite, vous pouvez écrire des données dans votre base de données.

1
Abhinav Raja

Utilisez Push() avant de définir la valeur dans la base de feu. Il créera un nouvel utilisateur chaque fois que vous envoyez une valeur dans la base de données.

1
Roshaan Qurban

Dans mon cas, j'ajoute un nouvel enfant comme celui-ci! 

NOTE: J'ajoute un nouvel enfant refresh_token à mon firebase database

FirebaseDatabase.getInstance().getReference().child("RegistrationModel").child(userId)
                    .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Map<String, String> stringStringHashMap =(Map<String, String>) dataSnapshot.getValue();

                    stringStringHashMap.put("refresh_token",refreshedToken);

                    FirebaseDatabase.getInstance().getReference().child("RegistrationModel").child(userId)
                            .setValue(stringStringHashMap);

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
0
kdblue

Vérifiez cet échantillon, il peut vous aider. 

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

Ajoutez votre valeur à la base de données firebase,

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

    }
});

Et votre valeur de résultat sera ajoutée à votre base de données comme ci-dessous,

contacts:
    arun:
        mDisplayName:"arunwin"
0
Srinivasan