Eh bien, je suis nouveau sur Firebase et je veux avoir mes propres clés tout en transmettant de nouvelles données à la base de données.
Problème:
FireBase.Push().setValue(mapped_values);
Cela donne la structure comme ci-dessous:
Comment puis-je créer ma propre clé personnalisée ici? Tels que le nom d'utilisateur ou quelque chose.
L'appel de Push()
générera une clé pour vous.
Si vous utilisez plutôt child()
, vous pouvez déterminer vous-même la clé/le chemin.
ref.child("Victor").setValue("setting custom key when pushing new data to firebase database");
String key="1234567sdfsf8";
//custom object
User user=new User();
DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("Users").child(key).setValue(user);
Vous pouvez créer une clé personnalisée à l'aide de setValue () même si la racine contient de nombreux enfants, par exemple si "Utilisateurs" est la racine et que vous souhaitez ajouter des utilisateurs avec un email comme clé, ce sera comme ceci
firebase.child("firebase url").child("Users").child("user_1 email").setValue(...)
firebase.child("firebase url").child("Users").child("user_2 email").setValue(...)
etc
J'espère que cela t'aides.
Si vous utilisez FirebaseUI :
private static final CollectionReference usersCollection = FirebaseFirestore.getInstance().collection("users");
User user = new User("MyUsername", "MyPictureUrl");
String userKey = "1234567sdfsf8";
usersCollection.document(userKey).set(user); //MAGIC LINE
Dans la requête POST elle générera un identifiant, mais dans la requête PATCH, PUT, elle mentionnera la clé qui vous sera fournie.
si l'enfant de référence de base de données est une chaîne fixe, la nouvelle valeur ne sera pas ajoutée. juste il va mettre à jour la valeur précédente. par exemple :
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference(); String mText = // get data from editText or set your own custom data
maintenant, si j'insère des données comme ceci:
myRef.child("abc").child("cba").setValue(mText);
chaque fois que j'insère des données, mes données précédentes sont mises à jour. Cela n'ajoutera pas de nouvelles données. Parce que ma référence est fixée ici (myRef.child("abc").child("cba")
// celle-ci, qui est toujours fixée).
Maintenant changez la valeur de l'enfant "cba" en une valeur aléatoire ou dynamique qui ne sera pas corrigée. Par exemple:
Random Rand = new Random(); // Obtain a number between [0 - 49]. int n = Rand.nextInt(50); myRef.child("abc").child(String.valueOf(n)).setValue(mText);
Dans ce cas, il va ajouter une nouvelle valeur au lieu de mettre à jour. parce que cette référence de temps n'est pas fixée ici. c'est dynamique. La méthode Push () fait exactement la même chose. il génère une clé aléatoire pour maintenir une référence unique.
Juste pour partager les connaissances.
si vous utilisez la technologie Fire-Sharp, vous pouvez créer la clé personnalisée comme suit.
IFirebaseConfig config = new FirebaseConfig
{
AuthSecret = "SecretKey",
BasePath = "https://abc.firebaseio.com/",
Host = "abc.firebaseio.com/"
};
IFirebaseClient client = new FirebaseClient(config);
var obj = new Users
{
FirstName = "test",
MiddleName = "user",
LastName = "xyz"
};
SetResponse response = client.SetAsync("Profile", "YourID");//you can use Set() as well
response = client.SetAsync("Profile/YourID", obj);//you can use Set() as well
Simple et rapide
Map<String,Object> taskMap = new HashMap<>();
taskMap.put("Name", name.getText().toString());
taskMap.put("km", km.getText().toString());
// taskMap.put("age", "45");
taskMap.put("Day", day.getText().toString());
mDatabaseReference.Push().setValue(taskMap);