Как изменить ключ в базе данных firebase?

Я делаю приложение для социальных сетей. Все пользовательские данные являются дочерними по отношению к объекту имени пользователя. Например

root:
  +users:
    +ricksanchez:
      +name:"Rick Sanchez";
      +email:"[email protected]";
      +bio:"I'm super smart";
      +followers:
        +follower1:morty;
        +follower2:summer;
      ....

Как изменить ключ риксанчеса без потери данных?

Можно ли переименовать ключ в базе данных Firebase Realtime?

Я ответил на этот вопрос, но я новичок в кодировании. Думаю, это не Java. Вы знаете, как это сделать на Java?

Возможный дубликат Можно ли переименовать ключ в базе данных Firebase Realtime?

Diyako 03.09.2018 13:25

Я новичок в программировании. Я не понял, о чем здесь написано. Вы знаете, как это сделать на Java?

UzaySan 03.09.2018 13:33

Ключи нельзя переименовать в Firebase. Это очень хороший пример того, почему ключи не должны быть связаны с данными, которые они содержат. См. Ответ на этот вопрос для более подробной информации.

Jay 05.09.2018 19:26
0
3
1 981
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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);
}

Вы умеете копировать все данные. Я имею в виду, что у меня есть класс пользователя, в котором я могу хранить простую информацию, такую ​​как имя, адрес электронной почты или пароль, но ключ имени пользователя также включает подписчиков, изображения и другие вещи. Как я могу скопировать все это и загрузить под другое имя пользователя?

UzaySan 03.09.2018 13:24

По сути, это другой вопрос, но я обновил свой ответ с учетом вашего второго требования. Так что, пожалуйста, посмотрите мой обновленный ответ.

Alex Mamo 03.09.2018 13:41

Если вы считаете, что мой ответ помог вам в решении первой и второй проблемы, примите его, нажав на галочку слева под стрелками голосования. Должен поменять цвет на зеленый. Буду признателен. Спасибо!

Alex Mamo 03.09.2018 13:42

Привет, я использую ваш код, и он работает как шарм, но когда я запускаю ваш код во второй раз, не закрывая приложение, мое приложение вылетает. Вы знаете, почему?

UzaySan 06.09.2018 22:15

Отправьте еще один свежий вопрос, включая всю ошибку, чтобы я и другие пользователи могли вам помочь.

Alex Mamo 07.09.2018 09:58

Другие вопросы по теме