Как удалить прослушиватели событий Firebase, если я добавляю их с помощью статического метода отдельного класса utils? - PullRequest
0 голосов
/ 24 апреля 2018

Я разрабатываю приложение для форума, в котором мне нужно написать один и тот же код, такой как добавление слушателей к ссылкам Firebase, привязка данных к представлениям и т. Д. Во многих местах.Поэтому я написал класс Utils с методами для всех таких повторяющихся кодов.

public class UIUtils {
    public static FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
    public static DatabaseReference mReference = mDatabase.getReference();

    public static class DataBindingUtils {
        public static void bindDataToFollowButton(final RecyclerViewHolder.UnansweredRecyclerViewHolder
                                                          holder, String questionKey, final String userName) {
            mReference.child("Posts").
                    child(questionKey).child("Followers")
                    .addChildEventListener(new ChildEventListener() {
                        @Override
                        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                            if (dataSnapshot.exists()) {
                                if (dataSnapshot.getValue().equals(userName)) {
                                    holder.FollowButton.setChecked(true);
                                }
                            }
                        }

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

                        }

                        @Override
                        public void onChildRemoved(DataSnapshot dataSnapshot) {
                            if (dataSnapshot.exists()) {
                                Log.v("onChildRemoved", dataSnapshot.toString());
                            }
                        }

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

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });

        }

Как удалить таких слушателей, как в приведенном выше методе?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Чтобы решить эту проблему, я рекомендую вам использовать следующий метод, который можно создать в вашем UIUtils классе:

public static void removeListener(Map<DatabaseReference, ValueEventListener> map) {
    for (Map.Entry<DatabaseReference, ValueEventListener> entry : map.entrySet()) {
        DatabaseReference databaseReference = entry.getKey();
        ValueEventListener valueEventListener = entry.getValue();
        databaseReference.removeEventListener(valueEventListener);
    }
}

В вашем классе деятельности, где вам нужно удалить одного или нескольких слушателей, простосоздайте Map и поместите все ссылки и слушателей, которых вы хотите удалить.Ваша карта должна выглядеть следующим образом:

Map<DatabaseReference, ValueEventListener> map = new HashMap<>();
map.put(referenceOne, listenerOne);
map.put(referenceTwo, listenerTwo);
//You can add as many listeners as you want

А затем просто вызовите метод removeListener из вашего UIUtils класса и передайте объект map в качестве аргумента, подобного этому:

UIUtils.removeListener(map);
0 голосов
/ 24 апреля 2018

Сделай так:

Определение слушателя

private ChildEventListener mListener = new ChildEventListener() {
    //Your Implementation of Listener
}

Добавление прослушивателя в базу данныхСсылка:

mReference.addChildEventListener(mListener);

Удаление прослушивателя из базы данных. Ссылка:

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