java - 当我在 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;
}
});
}
数据按我的意愿添加。但它是直接工作的。我的意思是说?例如,我想在数据上传到数据库后更新我的英雄。但在这种情况下,我的英雄正在直接更新自己(在数据上传到数据库之前)。那么数据上传到数据库后我应该怎么做才能触发这个方法呢?
解决方案
Firebase 客户端会立即为本地写入操作触发本地事件。这称为延迟补偿,因为这意味着用户总是可以立即看到自己的更改。
如果要在 UI 中反映数据已写入后端数据库,则可以向写入操作添加完成侦听器。
推荐阅读
- python - pytesseract - 识别不同背景的文本
- javascript - 在 React Native 应用程序(使用 Expo + Redux)中在哪里初始化 API 密钥(例如:Amplitude)?
- node.js - heroku 不使用纱线缓存模块
- python-3.x - 如何抓取不变的Url的不同页面,这些页面随着Url顶栏上的选项卡而变化?
- golfscript - 这个 GolfScript 代码如何打印 1000 位 pi?
- python - 使用 AWS Lambda 函数将机器学习带入现场生产
- javascript - Node.js 中的单线程究竟是如何工作的?
- ms-word - 在word文档中粘贴MATHML代码时如何解决空格问题?
- c# - 具有 RGBA 格式的图像数据的字节数组,以用于 UWP 的 C# 文件
- sed - 使用 find 和 sed 查找和替换