首页 > 解决方案 > 当我在 Firebase 实时数据库中添加新数据时,为什么 onChildChanged() 方法可以直接工作

问题描述

这是我的代码:

 @Override
        public void onChildChanged(@NonNull @NotNull final DataSnapshot snapshot, @Nullable @org.jetbrains.annotations.Nullable String previousChildName) {

            if(playerGenerator.getPlayerById(snapshot.getKey()) == null)
                return;
            if(playerGenerator.getPlayerById(snapshot.getKey()).hero == null)
                return;

            if(snapshot.child("targetId").getValue(String.class) != "null")
            {
                Gdx.app.postRunnable(new Runnable() {
                    @Override
                    public void run() {
                        playerGenerator.getPlayerById(snapshot.getKey()).targetHero = playerGenerator.getPlayerById(snapshot.child("targetId").getValue(String.class)).hero;

                    }
                });
            }

数据按我的意愿添加。但它是直接工作的。我的意思是说?例如,我想在数据上传到数据库后更新我的英雄。但在这种情况下,我的英雄正在直接更新自己(在数据上传到数据库之前)。那么数据上传到数据库后我应该怎么做才能触发这个方法呢?

标签: javaandroidfirebasefirebase-realtime-database

解决方案


Firebase 客户端会立即为本地写入操作触发本地事件。这称为延迟补偿,因为这意味着用户总是可以立即看到自己的更改。

如果要在 UI 中反映数据已写入后端数据库,则可以向写入操作添加完成侦听器。


推荐阅读