首页 > 解决方案 > 如何从 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;
    }
}

JSON结构1

JSON结构2

日志

当一个键值对添加到子节点时,onChildChanged 会被正确调用,但日志不会实时显示这个新添加的对,而是延迟显示。更改的子节点被正确提及;如何同步检索这个新添加的键值对?

标签: androidfirebasefirebase-realtime-database

解决方案


推荐阅读