java - 如果我使用单独的 utils 类的静态方法添加 Firebase 事件监听器,如何删除它们?

标签 java android firebase firebase-realtime-database

我正在开发一个论坛应用程序,我必须在其中编写相同的代码,例如在很多地方向 Firebase 引用添加监听器、将数据绑定(bind)到 View 等。因此,我编写了一个 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) {

                        }
                    });

        }

如何删除上述方法中的此类监听器?

最佳答案

这样做:

定义监听器

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

将监听器添加到 DatabaseReference:

mReference.addChildEventListener(mListener);

从 DatabaseReference 中删除监听器:

mReference.removeEventListener(mListener);

关于java - 如果我使用单独的 utils 类的静态方法添加 Firebase 事件监听器,如何删除它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50005367/

相关文章:

angular - 无效管道参数 : '[object Object]' for pipe 'AsyncPipe' Angular 6 and FIrebase

java - 如何在android上的服务中显示对话框

java - 如何以编程方式隐藏 android 一些但不是全部的 XML 输出中的查看项目?

javascript - firebase 在一处返回未定义的用户 ID,在另一处返回正确的值

java - 回到调用另一个 Activity 的 fragment

java - 如何在Android中使用InetAddress获取IPAddress

android - dataSnapShot.getKey() 不返回实际的按键

java - 如何使用监听器捕获所有运动事件

java - wicket 中的动态 <optgroup> 支持

java - 安全地将对象添加到无法设置的原始列表中(Java AST)