firebase заменил мои данные при перезапуске моего приложения - PullRequest
0 голосов
/ 04 сентября 2018

Мое приложение будет генерировать gameKey каждый раз, когда пользователь входит в систему и нажимает кнопку «начать игру». Переменная «gameKey» генерируется следующим кодом, и затем я сохраню данные под gameKey. Проблема в том, что всякий раз, когда я перезагружаю свое приложение, Firebase заменяет все дерево данных новым сгенерированным gameKey.

Я хотел бы создать новый gameKey без перезаписи старых данных каждый раз при запуске моего приложения. Было бы очень приятно, если бы кто-нибудь мог указать на мою проблему, спасибо большое!

    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    UserId = mAuth.getCurrentUser().getUid();
    DatabaseReference currentUserId = database.getReference("user").child(UserId);

    gameKey = currentUserId.child("gameinfo").push().getKey();

    Map<String, Object> game = new HashMap<>();
    game.put(gameKey, new Game(tv_player1name.getText().toString(), tv_player2name.getText().toString(), tv_player3name.getText().toString(), tv_playerMename.getText().toString(), gameMode, gameDate ));
    currentUserId.child("gameInfo").updateChildren(game);

Firebase Data:
  - user
      - 5xGKRXeHgThQy70lduPEp3mosTj1   (UID)
            - gameInfo
                  -LLV0H0ZJwYT5M42Obfb
                       gameDate: "20180903_232015"      
                       gameType: "HKMJ"
                       player1name: "peter"
                       player2name: "jenny"
                       player3name: "john"
                       player4name: "wilson"

     *This is the gameKey generated: "LLV0H0ZJwYT5M42Obfb"

Это код после ваших предложений:

  final FirebaseDatabase database = FirebaseDatabase.getInstance();
  DatabaseReference currentUserId = database.getReference("user").child(UserId);
  currentUserId.setValue(new User(mAuth.getCurrentUser().getEmail(), UserPic));
  gameKey = currentUserId.child("gameinfo").push().getKey();

  Map<String, Object> game = new HashMap<>();

  game.put(gameKey, new Game(tv_player1name.getText().toString(), tv_player2name.getText().toString(), tv_player3name.getText().toString(), tv_playerMename.getText().toString(), gameMode, gameDate )); 

  currentUserId.child("gameInfo").child(gameKey).updateChildren(game);

Кроме того, я попытался заменить эту строку

 game.put(gameKey, new Game(tv_player1name.getText().toString(), tv_player2name.getText().toString(), tv_player3name.getText().toString(), tv_playerMename.getText().toString(), gameMode, gameDate )); 

с этой строкой, тот же результат

 Game game = new Game(tv_player1name.getText().toString(), tv_player2name.getText().toString(), tv_player3name.getText().toString(), tv_playerMename.getText().toString(), gameMode, gameDate );

Благодарю за помощь!

Скриншот Firebase

1 Ответ

0 голосов
/ 04 сентября 2018

Чтобы решить эту проблему, измените следующую строку кода:

currentUserId.child("gameInfo").updateChildren(game);

до

currentUserId.child("gameInfo").child(gameKey).updateChildren(game);

Вы в основном генерируете случайный ключ, но не используете его вообще. Поэтому вам нужно передать gameKey методу child(), как показано в моем коде выше.

Редактировать: Так что решите весь процесс обновления, пожалуйста, используйте следующие строки кода:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference gameInfoRef = rootRef.child("user").child(uid).child("gameInfo");
String key = gameInfoRef.push().getKey();
Map<String, Object> game = new HashMap<>();
game.put("player1name", tv_player1name.getText().toString());
game.put("player2name", tv_player2name.getText().toString());
game.put("player3name", tv_player3name.getText().toString());
game.put("playerMename", tv_playerMename.getText().toString());
game.put("gameMode", gameMode);
game.put("gameDate", gameDate);
gameInfoRef.child(key).updateChildren(game);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...