Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to know if firebase ChildEventListener found child ? [android]

so I'm trying to get users key by their email and the problem is that I dont know inside my code if the query actually found something or not .. so I'm assuming if I'm inside onchildadded that the query is successful and a child has been found so I will pass the key to another activity and stop current activity but when I run the app the whole code get executed .. I feel my way is kinda wrong but I didn't find any way to know if the query is sucsessful or a child is found .... if you have any idea pleas help ...

  public void searchemail(String email){

  Firebase ref = new Firebase("https://<myfirebase>.firebaseio.com/users");
    Query queryRef = ref.orderByChild("Email").equalTo(email);


     ChildEventListener listener = new ChildEventListener() {

        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            userkey = dataSnapshot.getKey();
              homeintent.putExtra("key", userkey);
               startActivity(homeintent);
               finish();
               return; 
                 // I want code to stop here 

        }}
    queryRef.addChildEventListener(listener);

      Toast toast = Toast.makeText(this, "email not found", Toast.LENGTH_SHORT); // Im assuming if Im here then no child is found but this always get executed before startactivity  
   }

OUTPUT : if email found -> toast will show then home activity will start... if email not found -> only toast will show..

like image 687
toix12345 Avatar asked Dec 01 '25 02:12

toix12345


1 Answers

The methods of a ChildEventListener get called when the relevant event happened. So onChildAdded() will be called when a child has been added. For this reason you cannot easily use a ChildEventListener to detect if a child exists.

The easiest way to detect if a child exists, is to use a ValueEventListener:

public void searchemail(String email){

  Firebase ref = new Firebase("https://<myfirebase>.firebaseio.com/users");
  Query queryRef = ref.orderByChild("Email").equalTo(email);


   ValueEventListener listener = new ValueEventListener() {

     @Override
     public void onDataChanged(DataSnapshot snapshot) {
       if (snapshot.exists()) {
         for (DataSnapshot child: snapshot.getChildren()) {
           homeintent.putExtra("key", child.getKey());
           startActivity(homeintent);
           break; // exit for loop, we only want one match
         }
       }
       else {
         Toast toast = Toast.makeText(this, "email not found", Toast.LENGTH_SHORT);
       }
     }
   };
   queryRef.addValueEventListener(listener);
}
like image 61
Frank van Puffelen Avatar answered Dec 02 '25 17:12

Frank van Puffelen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!