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.
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.
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.
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.
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.
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) {
}
});
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"