即使当我退出活动并转到另一个活动时,此代码仍然有效.为了理解这一点,我go 了另一个活动,删除了Firebase中的路径,由于该路径不再存在,应用程序崩溃了.我想在退出活动时禁用此代码,我该怎么做?

private void addRoomEventListener() {
        messageRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if (role.equals("host:")) {
                    if (snapshot.getValue(String.class).contains("guest:")) {
                        step.setEnabled(true);
                        Toast.makeText(DuelGame.this, "" +
                                snapshot.getValue(String.class).replace("guest:", ""), Toast.LENGTH_SHORT).show();
                    }
                } else {
                    if (snapshot.getValue(String.class).contains("host:")) {
                        step.setEnabled(true);
                        Toast.makeText(DuelGame.this, "" +
                                snapshot.getValue(String.class).replace("host:", ""), Toast.LENGTH_SHORT).show();
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                messageRef.setValue(message);
            }
        });
    }

推荐答案

您可以在变量yourListener中保存addValueEventLister个调用,然后在切换到另一个活动或当前活动即将完成时执行此操作(通常在onPause()onStop()中),

dbref.removeEventListener(yourListener);

Java相关问答推荐

如何在Docker容器中使用wireock—Webhooks阻止请求?

如何在Java中声明未使用的变量?

Spring Boot@Cachebale批注未按预期工作

在运行MVN测试时,为什么构建失败,并显示了java.lang.ClassNotFoundException:java.net.http.HttpResponse?

蒙蒂霍尔比赛结果不正确

为什么S的文档中说常量方法句柄不能在类的常量池中表示?

如何将其他属性引用到log4j2 yaml配置中?

搜索列表返回多个频道

使用用户引入的参数生成人员数组

在向WebSphere中的文档添加元素时iText挂起

舰队运行配置Maven版本

Regex以查找不包含捕获组的行

如何处理两个几乎相同的XSD文件?

基于Java中mm/dd/yy格式的最近日期对数组列表进行排序

无法在IntStream上应用Collectors.groupingBy

如何制作回文程序?

Java List有一个在一个位置添加多个元素的方法,但我找不到一个在一个位置删除多个元素的方法

谷歌应用引擎本地服务器赢得';t在eclipse上运行

如何组合Mono和Flux

睡眠在 Spring Boot 中