Je veux récupérer l'identifiant généré par firebase quand j'y ai poussé de la valeur
Je veux récupérer "-KGdKiPSODz7JXzlgl9J" cet identifiant pour cet e-mail J'ai essayé avec getKey () mais il renvoie "utilisateurs" ne me faites pas l'obtenir comme objet utilisateur dans mon application
comment résoudre cela?
Firebase users = myFirebaseRef.child("users");
users.orderByChild("email").equalTo("[email protected]").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
dataSnapshot.getKey();
Log.d("User",dataSnapshot.getRef().toString());
Log.d("User",dataSnapshot.getValue().toString());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.d("User",firebaseError.getMessage() );
}
});
UPDATE 1: Il peut aussi être obtenu par une ligne
String key = mDatabase.child("posts").Push().getKey();
// ************************************************ ************** //
après avoir cherché et essayé beaucoup de choses, je suis arrivé à deux façons de le faire . 1. le premier à obtenir la clé lorsque je télécharge le message sur le serveur via cette fonction
public void uploadPostToFirebase(Post post) {
DatabaseReference mFirebase = mFirebaseObject
.getReference(Constants.ACTIVE_POSTS_KEY)
.child(post.type);
mFirebase.Push().setValue(post);
Log.d("Post Key" , mFirebase.getKey());
}
je l'ai utilisé dans mon code pour obtenir la clé après l'avoir déjà poussée au nœud pour cela dans ma base de données
public void getUserKey(String email) {
Query queryRef = databaseRef.child(Constants.USERS_KEY)
.orderByChild(Constants.USERS_EMAIL)
.equalTo(email);
queryRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
//TODO auto generated
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
//TODO auto generated;
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
//TODO auto generated;
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
//TODO auto generated
}
@Override
public void onCancelled(DatabaseError databaseError) {
//TODO auto generated
}
});
}
Vous pouvez lire la clé depuis Push () sans pousser les valeurs. Plus tard, vous pouvez créer un enfant avec cette clé et pousser les valeurs pour cette clé.
// read the index key
String mGroupId = mGroupRef.Push().getKey();
....
....
// create a child with index value
mGroupRef.child(mGroupId).setValue(new ChatGroup());
mGroupId
contient la clé utilisée pour indexer la valeur que vous êtes sur le point de sauvegarder.
Lorsque vous déclenchez une requête Firebase, il peut potentiellement y avoir plusieurs résultats. Ainsi, lorsque vous demandez la valeur d'une requête, Firebase renvoie une liste d'éléments. Même s'il n'y a qu'un seul élément correspondant, il s'agira d'une liste d'un seul élément.
Vous devrez donc gérer cette liste dans votre code:
users.orderByChild("email").equalTo("[email protected]").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child: dataSnapshot.getChildren()) {
Log.d("User key", child.getKey());
Log.d("User ref", child.getRef().toString());
Log.d("User val", child.getValue().toString());
}
}
En Java - Android Studio, vous pouvez obtenir l'ID unique poussé lorsque l'élément est écrit dans la base de données ...
Par "Firebase: Save Data on Android": Vous pouvez utiliser la référence aux nouvelles données renvoyées par la méthode Push () pour obtenir la valeur de la clé générée automatiquement par l'enfant ou des données définies pour l'enfant. L'appel de getKey () sur une référence Push () renvoie la valeur de la clé générée automatiquement.
Pour obtenir la référence au moment de l'écriture, au lieu de charger DATA avec un seul Push () ...
voici un exemple:
FirebaseDatabase fb_db_instance = FirebaseDatabase.getInstance();
DatabaseReference db_ref_Main = fb_db_instance.getReference("string_db_Branch_Name");
hashMap_record = new HashMap<String, String>(); //some random data
hashMap_record.put("key_Item1", "string_Item1");
hashMap_record.put("key_Item2", "string_Item2");
DatabaseReference blankRecordReference = db_ref_Main ;
DatabaseReference db_ref = blankRecordReference.Push(); //creates blank record in db
String str_NEW_Records_Key = db_ref.getKey(); //the UniqueID/key you seek
db_ref.setValue( hashMap_record); //sets the record
Je l'ai résolu pour obtenir l'identifiant dont vous avez besoin
String uid = firebaseRef.child("users").Push().getKey();
Log.i("uid", uid);
cela vous donnera la clé KG.....
Pour ceux qui utilisent les tutoriels TVAC ( https://www.youtube.com/watch?v=cSMMWOHkP68&list=PLGCjwl1RrtcTXrWuRTa59RyRmQ4OedWrt&index=16 )
Vous pouvez obtenir la clé en utilisant la méthode onClick comme suit:
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String key = getRef(position).getKey();
}
});
Ajoutez simplement un nouveau champ à des utilisateurs comme userID, lorsque vous créez un nouvel utilisateur, ajoutez uid et que vous pourrez le recevoir en lisant la requête
Je le fais comme ça.
String userID;// in Users
Firebase users = myFirebaseRef.child("users");
users.orderByChild("email").equalTo("[email protected]").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Users user= dataSnapshot.getChildren().iterator().next().getValue(Users.class);
Log.d("User",user.getUserID());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.d("User",firebaseError.getMessage() );
}
});
J'avais fait face à ce problème et j'ai trouvé la solution, vous pouvez l'obtenir en utilisant ce code:
dataSnapshot.getChildren().iterator().next().getKey()
Une autre option pour obtenir le post-id unique de firebase consiste à obtenir la clé ( dataSnapshot.getKey () ) dans la méthode @Override public void onChildAdded et à la conserver localement par exemple
private void attachDatabaseReadListener() {
if (mTaskEventListener == null) {
mTaskEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Task friendlyMessage = dataSnapshot.getValue(Task.class);
friendlyMessage.setId(dataSnapshot.getKey());
System.out.println("friendlyMessage = " + friendlyMessage);
DummyContent.ITEMS.add(new DummyContent.DummyItem("" + DummyContent.ITEMS.size()+1,friendlyMessage.getStatus(),friendlyMessage.getSummary()));
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
public void onChildRemoved(DataSnapshot dataSnapshot) {}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
public void onCancelled(DatabaseError databaseError) {}
};
mUserDatabaseReference.addChildEventListener(mTaskEventListener); // remove it
}
}
dataSnapshot.getKey définira l'identifiant de publication unique dans l'instance de tâche et pourra être utilisé ultérieurement pour effectuer toute opération de mise à jour.