【问题标题】:How to change a key in firebase database?如何更改firebase数据库中的密钥?
【发布时间】:2025-12-01 17:25:02
【问题描述】:

我正在制作一个社交媒体应用。所有用户数据都是用户名对象的子对象。 例如

root:
  +users:
    +ricksanchez:
      +name:"Rick Sanchez";
      +email:"rick@sanchez.com";
      +bio:"I'm super smart";
      +followers:
        +follower1:morty;
        +follower2:summer;
      ....

如何在不丢失数据的情况下更改 ricksanchez 密钥?

Is it possible to rename a key in the Firebase Realtime Database?

我检查了这个问题,但我在编码方面很新。我猜那不是 Java。你知道如何用 Java 做吗?

【问题讨论】:

标签: android firebase firebase-realtime-database


【解决方案1】:

您不能更改密钥的名称,例如将ricksanchez 更改为其他名称。没有 API 可以做到这一点。如果要更改键的名称,则肯定需要将该特定对象复制到另一个位置,更改名称,然后删除旧记录。但是在 Firebase 中无法简单地更改密钥的名称。

编辑:根据您的评论,请使用以下方法将记录从一个位置复制到另一个位置。

private void copyRecord(DatabaseReference fromPath, final DatabaseReference toPath) {
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            toPath.setValue(dataSnapshot.getValue()).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isComplete()) {
                        Log.d(TAG, "Success!");
                    } else {
                        Log.d(TAG, "Copy failed!");
                    }
                }
            });
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    fromPath.addListenerForSingleValueEvent(valueEventListener);
}

【讨论】:

  • 你知道如何复制所有数据吗?我的意思是我有一个用户类,我可以保留简单的信息,例如姓名、电子邮件或密码,但用户名键还包括关注者、图像和其他内容。我怎样才能复制所有这些并上传到另一个用户名?
  • 这基本上是另一个问题,但我已经根据您的第二个要求更新了我的答案。所以请看我更新的答案。
  • 如果您认为我的回答对您解决第一个和第二个问题有帮助,请考虑通过单击左侧投票箭头下方的复选标记来接受它。应将颜色更改为绿色。我会很感激的。谢谢!
  • 嘿,我正在使用你的代码,它就像一个魅力,但是当我第二次运行你的代码而不关闭应用程序时,我的应用程序崩溃了。你知道为什么吗?
  • 请发布另一个新问题,包括整个错误,以便我和其他用户可以帮助您。