Каков наилучший способ удалить слушателя в классе Utile в Android? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть класс util, который помогает мне получать конкретные данные из базы данных Firebase, подобный этому классу

public class FirebaseUtils {  

    private DatabaseReference root;

    public FirebaseUtils(){
        root = FirebaseDatabase.getInstance().getReference();
    }

    public void setUerType(Context context,String userid){    
        DatabaseReference reference = root.child("teachers").child(userid);

        reference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                    PrefsHelper.getInstance(context).setUserType("teacher");
                }else {
                    PrefsHelper.getInstance(context).setUserType("student");
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }
}

, каков наилучший способ удалить слушателя, если я создаю метод в подобном классе utile

public void removeListener(){
    child.removeEventListener(listener);
}

и вызвать его в методе onDetach в упражнении?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Как я вижу в вашем коде, вы используете addListenerForSingleValueEvent(), что означает, что слушатель прочитает данные точно один раз.Это означает, что ваш метод onDataChange() запускается с текущим значением (из кэша, если доступно, в противном случае с серверов Firebase), и сразу после этого прекращает прослушивание.В этом случае нет необходимости удалять прослушиватель.

Единственный раз, когда addListenerForSingleValueEvent необходимо отменить, это если нет сетевого подключения, когда вы подключаете его, и у клиента нет локальной копииданных, либо потому, что был другой активный слушатель, либо потому, что у него есть копия данных на диске.

Итак, в заключение, нет необходимости вообще создавать метод removeListener().

0 голосов
/ 11 октября 2018

Да, но в вашем случае необходимо создать член типа слушателя и не пропускать реализацию анонимного слушателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...