You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何获取Firebase实时数据库push生成的唯一ID以更新数据

解决Firebase Realtime Database动态ID节点的更新问题

核心问题很明确:要更新对应节点,你必须拿到该数据对应的push生成的唯一ID,得从数据模型和数据读写环节入手处理:

1. 给数据模型类新增ID字段

假设你的数据类是Homework,直接加个id字段用来存储push生成的节点键,同时补上对应的getter/setter和构造方法:

public class Homework {
    private String name;
    private String addHomeworkDescription;
    private String id; // 用来存push生成的唯一ID

    // Firebase要求的空构造方法
    public Homework() {}

    // 带参构造,包含id
    public Homework(String name, String addHomeworkDescription, String id) {
        this.name = name;
        this.addHomeworkDescription = addHomeworkDescription;
        this.id = id;
    }

    // id的getter和setter
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    // 其他字段的getter/setter
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getAddHomeworkDescription() { return addHomeworkDescription; }
    public void setAddHomeworkDescription(String addHomeworkDescription) { this.addHomeworkDescription = addHomeworkDescription; }
}

2. 新增数据时保存ID到模型

当你往Firebase写入新数据时,要先获取push生成的ID,再把它存入模型后写入数据库:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("Homework").child(uid);
String pushId = myRef.push().getKey(); // 获取push生成的唯一ID
Homework newHomework = new Homework("作业标题", "作业描述", pushId);
myRef.child(pushId).setValue(newHomework); // 用pushId作为节点键写入数据

3. 在Adapter中用ID定位节点更新

回到你原有的编辑按钮代码,修改提交点击事件,直接通过myItems.getId()拿到对应的ID,填入child()即可:

submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Map<String,Object> map=new HashMap<>();
        map.put("name",title.getText().toString());
        map.put("addHomeworkDescription",description.getText().toString());

        DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("Homework");
        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        // 获取当前item对应的push ID
        String targetPushId = myItems.getId();
        // 定位到目标节点更新数据
        myRef.child(uid).child(targetPushId)
                .updateChildren(map);
        dialogPlus.dismiss();
    }
});

4. 读取数据时给模型赋值ID

从Firebase读取数据到Adapter时,别忘了把节点的key赋值给模型的id字段:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("Homework").child(uid);

myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        List<Homework> homeworkList = new ArrayList<>();
        for(DataSnapshot childSnapshot : snapshot.getChildren()){
            Homework homework = childSnapshot.getValue(Homework.class);
            // 把节点的key赋值给模型的id字段
            homework.setId(childSnapshot.getKey());
            homeworkList.add(homework);
        }
        // 更新你的Adapter数据
        yourAdapter.updateData(homeworkList);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        // 处理错误
    }
});

内容的提问来源于stack exchange,提问作者Nowty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:45:34