Get the pushed ID for specific value in firebase android

I want to retrive the id that generated by firebase when I pushed value to it like next

Firebase

  • How to enable/disable WiFi from an application?
  • Update an Android app (without Google Play)
  • Android 4.3: BLE: Filtering behaviour of startLeScan()
  • Using getFragmentManager() vs getSupportFragmentManager()?
  • Android Maven Directory Structure
  • RelativeLayout center vertical
  • I want to retrieve “-KGdKip….” this id for that email
    I tried by getKey() but it return “users”
    and when user get value it return the whole object from the id to profile picuter and that won’t make me get it as User object in my app

    how solve this ?

        Firebase users = myFirebaseRef.child("users");
        users.orderByChild("email").equalTo("z@m.com").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() );
            }
        });
    

  • Android JUnit test for SQLiteOpenHelper
  • Unable to resolve target 'android-19'
  • Call a Fragment method from an Adapter
  • Select text from TextView?
  • Android plugin install problems in eclipse
  • android, how to exec a sql file in sqlitedatabase
  • 8 Solutions collect form web for “Get the pushed ID for specific value in firebase android”

    You can read the key from push() without pushing the values. Later you can create a child with that key and push the values for that key.

    String mGroupId = mGroupRef.push().getKey();
    ....
    ....
    mGroupRef.child(mGroupId).setValue(new ChatGroup());
    

    mGroupId contains the key which is used to index the value you’re about to save.

    UPDATE 1:
    it can obtain also by one line

    String key = mDatabase.child("posts").push().getKey();
    

    //**************************************************************//

    after searching and trying a lot of things i came to 2 ways to do that
    .
    1. first one to get the key when i upload the post to the server via this function

     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. i used it in my code to get the key after i have already pushed it to node for it in my database

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

    When you fire a query Firebase query there can potentially be multiple results. So when you ask for the value of a query, Firebase returns a list of items. Even if there is only one matching item, it will be a list of one item.

    So you will have to handle this list in your ode:

    users.orderByChild("email").equalTo("z@m.com").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());
            }
        }
    

    I solved it to get id you need to use firebase url

    String uid = firebaseRef.child("users").push().getKey();
    Log.i("uid", uid);
    

    this will give you the key KG.....

    In Java – Android Studio, you can get the unique pushed ID as the item is written to the db…

    Per “Firebase’s: Save Data on Android”: You can use the reference to the new data returned by the push() method to get the value of the child’s auto-generated key or set data for the child. Calling getKey() on a push() reference returns the value of the auto-generated key.

    To get the reference at write time, instead of loading DATA with a single push()…

    • use push() to create a blank record in the database, return value is the record’s reference.
    • use .getKey() to get the Key for that record.
    • use .setValue(DATA) to fill in the blank record

    here’s an example:

        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 
    

    For those using TVAC Tutorials(https://www.youtube.com/watch?v=cSMMWOHkP68&list=PLGCjwl1RrtcTXrWuRTa59RyRmQ4OedWrt&index=16)

    You can get Key using onClick method as follows:

       viewHolder.mView.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
    
               String key = getRef(position).getKey();
    
              }
         });
    

    Just add new field to Users like userID, when you create new User add uid and than you can receive it by reading query

    I’m doing it like this.

    String userID;// in Users
    
    
    Firebase users = myFirebaseRef.child("users");
        users.orderByChild("email").equalTo("z@m.com").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() );
            }
        });
    

    Another Option to get the unique Post-id from firebase is by getting key (dataSnapshot.getKey()) in @Override method public void onChildAdded and maintaining it locally for example

    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 will set the unique post id in Task Instance and can be used later to perform any update operation.

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.