2016-02-20 6 views
1

, поэтому я пытаюсь получить ключ от пользователей по электронной почте, и проблема в том, что я не знаю внутри своего кода, если запрос действительно нашел что-то или нет .. поэтому я предполагаю, что если я внутри onchildadded, запрос будет успешным и будет найден дочерний элемент, поэтому я передам ключ другому действию и остановлю текущую активность, но когда я запустил приложение, весь код будет выполнен. Я чувствую, что мой путь неправильный, но я не нашел способ узнать, если запрос sucsessful или ребенок найден .... если у вас есть какие-либо идеи мольбы помочь ...Как узнать, найден ли детская дыра ChildEventListener? [android]

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 
    } 

ВЫВОД: , если адрес электронной почты найден -> тост будет показывать затем домой деятельность начнется ... если адрес электронной почты не найден -> только тост покажет ..

ответ

5

Методы ChildEventListener получили название , когда произошло соответствующее событие. Таким образом, onChildAdded() будет называться , когда ребенок был добавлен. По этой причине вы не можете легко использовать ChildEventListener для обнаружения , если ребенок существует.

Самый простой способ определить, если ребенок существует, использовать 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); 
} 
+1

спасибо брат, это именно то, что я хочу .... – toix12345

+1

Спасибо, как хорошо! – Vinod