为每个唯一用户创建节点并更新值

时间:2018-11-14 15:47:24

标签: android firebase firebase-realtime-database

我开始使用Firebase,并且有一个简单的应用程序,每隔几秒钟将一个随机整数存储到数据库中。但是,每次生成随机数时,都会在Firebase数据库的同一节点中将其替换(因此,对于应用当前安装的每个设备,我始终只有1个节点,而不是2个节点)。 我希望为应用安装的每台设备都将为同一用户替换随机数(因此,每个用户都有自己的节点,并且随机数不断变化)

这是简单的代码:

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

如何为每个唯一用户创建一个节点,其中随机生成的数字将替换旧的用户?

3 个答案:

答案 0 :(得分:1)

您可以控制每个用户而无需进行成员资格交易。

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);

答案 1 :(得分:0)

因此,如果您想让每个用户(或每个设备,正如您在问题中所指出的那样)有所变化,我建议根据此数据库。

我的意思是,您可以为每个用户使用自己的唯一名称创建一个单独的节点,或者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

答案 2 :(得分:0)

问题在于,每次保存那个randomInteger时,您都指向同一节点,这就是为什么要一遍又一遍地替换它的原因。

能够实现您要执行的操作的一种方法是捕获以毫秒为单位的当前时间,并将其传递给参考节点:

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

这样,每次您设置那个randomInteger时,在“消息”节点下都会有一个“毫秒时间”节点。