Firebase Android, установить значение где х = х? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть эта таблица в моей базе данных enter image description here

Я хочу настроить playerMoney на этого конкретного пользователя.

Я получаю электронную почту пользователя во времяаутентификация и использование намерений я переместить его в gameActivity.Там у меня есть mDatabase.child("users").child(u.getEmail()).child("playerData").child("playerMoney").setValue(Math.ceil(tap(playerMoney)));

, но при использовании этого вызывает Firebase Database paths must not contain '.', '#', '$', '[', or ']'

Я впервые использую Firebase, так что я не очень эффективен в его использовании, я тоже не смогнайди что-нибудь в Интернете, что-нибудь мне поможет.Может ли кто-нибудь поставить меня на прямой путь с этой проблемой?

1 Ответ

0 голосов
/ 21 февраля 2019

Похоже, вы пытаетесь обновить узел для пользователя, основываясь на знании адреса электронной почты этого пользователя.Чтобы записать любые данные в базу данных Firebase, вам необходимо знать точный путь к данным, которые вы хотите обновить.Поскольку вы, похоже, не знаете идентификатор, вам нужно его искать по адресу электронной почты.

mDatabase.child("users").orderByChild("email").equalTo(u.getEmail()).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
            userSnapshot.getRef().child("playerData").child("playerMoney").setValue(Math.ceil(tap(playerMoney)));
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}

Обратите внимание, что этот тип запроса часто является анти-паттерном в Firebase.В идеале вы хотите иметь структуру данных, которая не требует запроса такого обновления.Например, если вы храните пользователей по их UID, вы можете выполнить то же обновление с помощью этого гораздо более простого кода:

mDatabase.child("users").child(u.getUID()).child("playerData/playerMoney").setValue(Math.ceil(tap(playerMoney)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...