web-dev-qa-db-fra.com

Obtenir l'ID poussé pour une valeur spécifique dans firebase android

Je veux récupérer l'identifiant généré par firebase quand j'y ai poussé de la valeur 

 Firebase

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() );
        }
    });
26
Sattar

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());
 }
  1. 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 
          }
      });
     }
    
19
Sattar

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.

57
Samuel Robert

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());
        }
    }
14

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 () ... 

  • utilisez Push () pour créer un enregistrement vide dans la base de données, return est la référence de l'enregistrement.
  • utilisez .getKey () pour obtenir la clé de cet enregistrement.
  • utilisez .setValue (DATA) pour remplir l'enregistrement vide

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 
7
WM1

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.....

5
Ekta Dushanj

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

          }
     });
3
sley_paloh

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() );
        }
    });
2
Qdza

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()
1
Abdalltif Basher

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.

1
Mayank