Сделайте узел для каждого уникального пользователя и обновите значение - PullRequest
0 голосов
/ 14 ноября 2018

Я начал работать с Firebase, и у меня есть простое приложение, которое каждые несколько секунд сохраняет случайное целое число в базе данных. Но каждый раз, когда генерируется случайное число, оно заменяется на одном и том же узле в базе данных Firebase (поэтому у меня всегда есть 1 узел вместо 2 для каждого устройства, на котором в данный момент установлено приложение). Я хочу, чтобы для каждого устройства было установлено приложение, случайное число будет заменено для одного и того же пользователя (поэтому у каждого пользователя есть свой собственный узел с постоянно меняющимся случайным числом)

Это простой код:

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue(randomInteger);

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

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

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

Один из способов добиться того, что вы пытаетесь сделать, - это зафиксировать текущее время в миллисекундах и передать его на эталонный узел:

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.child(Calendar.getInstance().getTimeInMillis());
myRef.setValue(randomInteger);

Таким образом, вы получитеузел «миллисекундного времени» под узлом «сообщения» каждый раз, когда вы устанавливаете этот randomInteger.

0 голосов
/ 14 ноября 2018

Вы можете контролировать каждого пользователя без членских транзакций.

Context context = this;
SharedPreferences.Editor editor;
SharedPreferences preferences;
String userKey;

preferences = PreferenceManager.getDefaultSharedPreferences(context);
editor = preferences.edit();

userKey = preferences.getString("userKey", null);

if (userKey == null) {
        DatabaseReference dbNewRef = db.getReference("message");
        userKey = dbNewRef.push().getKey();
        editor.putString("userKey", userKey);
        editor.apply();
    }

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message/userKey");
myRef.setValue(randomInteger);
0 голосов
/ 14 ноября 2018

Итак, если вы хотите, чтобы что-то изменилось для каждого пользователя (или каждого устройства, как вы указали в вопросе), я бы предложил сделать вашу базу данных в соответствии с этим.

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

Структура вашей базы данных будет выглядеть примерно так:

FirebaseUniqueIden
|
|
 --- uid1
| |
|  -- randomValue
| |
|
| 
 --- uid2
 |
  -- randomeValue
 | 

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

ТеперьВозникает вопрос, как бы вы получили такую ​​структуру?Ответ очень прост, вы можете получить uid каждого пользователя, используя FirebaseAuth.getUid().Этот uid уникален для каждого пользователя и определяется, когда вы входите в систему.

Таким образом, чтобы настроить это в своей базе данных, вы можете просто использовать код, подобный следующему:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");

ref.child(mAuth.getUid()).child("randomValue").setValue(random);

// mAuth is FirebaseAuth variable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...