2016-10-26 3 views
1

Я использую следующий код для извлечения данных из базы данных Firebase, но так как это делает сетевой запрос в фоновом потоке, поэтому я хочу подождать, пока он не завершит запрос и не получит стоимость. Например,Как определить, извлекал ли ValueEventListener данные или нет в Firebase

boolean isAvailable=false; 
    usernameReference.addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         isAvailable = true; 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 
         progressBar.setVisibility(View.GONE); 
        } 
       }); 
if(isAvailable){ 
     //do something here 
} 
else{ 
     //do something here 
} 

Этот фрагмент кода всегда выполнить еще часть, так что я хочу ждать, пока переменная isAvailable получить значение из базы данных, то дальнейшее выполнение будет происходить.

+0

Используйте для этого интерфейс. –

+0

Не могли бы вы привести мне пример? –

ответ

2

Сначала создайте интерфейс, как это:

Предположит, приведенные выше код в этом методе, который принимает объект интерфейса для запуска обратного вызова, как:

public void isAvailable(IsAvailableCallback callback) { 
    boolean isAvailable=false; 
    usernameReference.addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        isAvailable = true; 
        //this will trigger true 
        callback.onAvailableCallback(isAvailable); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 
        progressBar.setVisibility(View.GONE); 
        //this will trigger false 
        callback.onAvailableCallback(isAvailable); 
       } 
      });     
} 

вызывает этот метод, как:

isAvailable(new IsAvailableCallback() { 
    @Override 
    public void onAvailableCallback(boolean isAvailable) { 
     //you will get callback here, Do your if condition here 
    } 
} 
+0

Спасибо ... Пояснено ...! –

+0

Добро пожаловать –

Смежные вопросы