首页 > 解决方案 > Firebase 不使用“gdx-fireapp”删除事件监听器

问题描述

我正在尝试使用gdx-fireapp库在 LibGdx 应用程序中实现 Firebase。我可以成功读取、更改或删除任何数据,但是当我在获取我想要的数据后尝试删除事件侦听器时,它不会被删除。我应该呼吁cancel();发生这种情况,但什么也没有发生。我什至试过多次打电话 cancel();,但它仍然不起作用。有谁熟悉我该如何解决这个问题?

我是这样称呼它的

        GdxFIRDatabase.inst()
                .inReference("Rooms/")
                .onDataChange(Map.class)
                .then(new Consumer<Map>() {
                    @Override
                    public void accept(Map map) {
                        Gdx.app.log("test","onDataChangedCalled");
                    }
                });

这是我取消它的方法:

        GdxFIRDatabase.inst().inReference("Rooms/").onDataChange(Map.class).cancel();

调用后cancel();,它应该在值更改但没有更改时停止记录“onDataChangedCalled”。

标签: androidfirebasefirebase-realtime-databaselibgdx

解决方案


对于任何面临同样问题的人,您必须将侦听器存储到一个变量中,并使用该变量来调用它并取消它。

我是这样做的:

    ListenerPromise<Map> Rooms;

        Rooms = GdxFIRDatabase.inst().inReference("Rooms/").onDataChange(Map.class);

        GdxFIRDatabase.promise()
                .then(Rooms)
                .then(new Consumer<Map>() {
                    @Override
                    public void accept(Map map) {
                        Gdx.app.log("test","onDataChangedCalled");
                    }
                });

并取消它只是cancel();这样调用:

Rooms.cancel();

推荐阅读