这是我的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ValueEventListener userNavListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.v(Tag, "Called Multiple Times");
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    };

    mDatabase.addValueEventListener(userNavListener);
}


我要:
-在背景上应用addValueEventListener的单个实例
-因此,我不想使用onDestroy()方法

问题是当我这样做时,如果数据仅更改一次,则Log.v会打印多次以上:
   -我打开应用程序,
   -我再次关闭应用程序,
   -然后我再次打开该应用程序,
   -然后出现问题,这是onDataChange日志打印了三次。

我有解决方案来防止这种情况吗?

感谢您抽出宝贵时间阅读此问题,如果您知道答案,请回答我的问题。

最佳答案

您必须删除不再需要的eventListeners。

安全的地方是在onDestroy()中进行

@Override
public void onDestory() {
    if (mDatabase!= null && userNavListener!= null) {
        mDatabase.removeEventListener(userNavListener);
    }
}

09-25 22:23