android - 如何从 Firebase 实时数据库 onChildChanged Android 获取更改的数据?
问题描述
可以成功地将传感器数据写入 Firebase 实时数据库,从 Android 应用程序写入数据,但在调用 onChildChanged 时读取数据时无法实现同步。这是我的代码:
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
String root = snapshot.getKey();
Map<String, String> data = new HashMap<String, String>();
data = (HashMap<String, String>) snapshot.getValue();
ArrayList<String> values = new ArrayList<String>(data.values());
ArrayList<String> keys = new ArrayList<>(data.keySet());
String key = keys.get(keys.size() - 1);
String value = values.get(values.size() - 1);
assert root != null;
switch (root) {
case "temp":
tempText.setText(value);
Log.v(TAG, root + " = " + key + " : " + value);
break;
case "humi":
humText.setText(value);
Log.v(TAG, root + " = " + key + " : " + value);
break;
case "lght":
luxText.setText(value);
Log.v(TAG, root + " = " + key + " : " + value);
break;
case "stat":
ledText.setText(value);
Log.v(TAG, root + " = " + key + " : " + value);
break;
default:
Log.v(TAG, root);
break;
}
}
当一个键值对添加到子节点时,onChildChanged 会被正确调用,但日志不会实时显示这个新添加的对,而是延迟显示。更改的子节点被正确提及;如何同步检索这个新添加的键值对?
解决方案
推荐阅读
- asp.net-mvc - Kendo MultiSelect 未在 Kendo Grid 弹出窗口中呈现
- angular - 单击按钮时重试 Angular http 请求
- android - Flutter 和 Dart 的红屏死机不允许我运行应用程序
- alembic - 多个工程师如何使用 alembic 在同一个数据库上工作?
- python - 使用 cython 构建错误 | 链接:致命错误 LNK1181
- javascript - 将新项目添加或推送到数组
- r - 无法正确安装/加载 Rcpp
- json - 无法使用 spark 从多行 json 字符串或 JSONL 字符串创建数据帧
- algorithm - 在更大的矩形中最大化小矩形的面积(矩形包装)
- java - Android Studio Java - 如何使用随机数组而不重复?