繁体   English   中英

Firebase 如何在 Android 中打开其他活动时删除 ValueEventListeners

[英]Firebase how to ValueEventListeners remove when other activity open in Android

为了更清楚,我正在编辑问题

在我的Activity A中,我已经在某些情况下开始了我的新Activity B Activity A 的 OnCreate 有以下内容

final DatabaseReference reff = FirebaseDatabase.getInstance().getReference("Example").child(userid);
        reff.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {`
                    navHeaderName.setText(Objects.requireNonNull(dataSnapshot.child("name").getValue()).toString());
                    navHeaderId.setText(Objects.requireNonNull(dataSnapshot.child("member_ID").getValue()).toString());
                } else
                    reff.removeEventListener(this);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d("RF-NavSet", databaseError.toString());
            }
        });

`

fragment Af也在Activity A中膨胀

FragmentManager fm = getSupportFragmentManager();
        fragment = new FragmentOfActiityA(); 
fm.beginTransaction().replace(R.id.doc_fragment_container, fragment).commit();

在片段 A 中,我也有 Firebase ValueEventListener

listener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                TextView text1 = view.findViewById(R.id.some_text1);
                TextView text2 = view.findViewById(R.id.some_text2);
                TextView text3 = view.findViewById(R.id.some_text3);

                text1.setText(Objects.requireNonNull(dataSnapshot.child(userId).child("name").getValue()).toString());
                text2.setText(Objects.requireNonNull(dataSnapshot.child(userId).child("specialisation").getValue()).toString());
                text3.setText(Objects.requireNonNull(dataSnapshot.child(userId).child("member_ID").getValue()).toString());
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d("RF - SetProfile", databaseError.getMessage());
            }
        };

        reff.addListenerForSingleValueEvent(listener);

这里refflistener是全局声明的。

当我销毁 Activity A 时,我想删除Activity AFragment Af中的侦听器。

我怎样才能做到这一点?

如果我从其他一些Activity X更改任何数据库值,由于这些我不想要的 ValueEventListener 会自动触发Activity A

删除活动AonDestroy()中的侦听器

mDatabaseRef.child(key).removeListener(mListener);

当打开活动B时,您的活动A在后台,如果您想删除侦听器,则在onPause()中删除侦听器并在onResume()中添加侦听器

我已经得到了问题的答案。 有一个之前的Activity O我错过了 removeEventListener ,它正在秘密启动Activity A

花了一段时间才明白

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM