Firebase实时数据库,每次登录时都添加新的时间戳子节点?

时间:2017-11-19 12:24:24

标签: android firebase firebase-realtime-database firebase-authentication

我是firebase的新手,因为这是我的第一个项目,所以任何帮助都会受到赞赏,因为这个问题需要花费我几个小时的时间。我认为解决方案可能非常简单,但我没有看到它。

我想在每次登录应用程序时收集用户特定的数据,所以它就像这样(在实时数据库中):

-user-id{
        -10:40:50:{
                   -location:"loation1",
                   -activity:"walking",
                   -batteryLevel:"90%"
                    }
        -11:50:30:{
                   -location:"location2",
                   -activity:"running",
                   -battery-level:"80%"
                   }
    }

在尝试使用这些时间戳的子节点(位置,活动和电池电量)进行更多详细信息之前,我尝试着为每次登录创建不同的节点(时间戳)。  我认为下面的代码会创建这样的代码:

-user-id{
        -10:40:50:"10:40:50"
        -11:50:30:"11:50:30"
        }

但我只得到

-user-id{
         -11:50:30:"11:50:30"
        }

我的问题是,每次用户登录时,新的时间戳都会覆盖旧的时间戳,因此user-id始终只有一个子节点(与最新登录相关联的时间戳)。

这是我试过的代码。 PS:我尝试将“.setValue()”替换为“.push()。setValue()”,但最后一个时间戳总是会删除前一个时间戳。

FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference(firebaseAuth.getCurrentUser().getUid());
    myRef.setValue( firebaseAuth.getCurrentUser().getUid());
    String currentDateTime = DateFormat.getDateTimeInstance().format(new Date());
    DatabaseReference usersRef = myRef.child(currentDateTime );

    usersRef.setValue(currentDateTime);

上面的代码我把它放在活动“ProfileActivity.java”的Oncreate中,它基本上是用户在正确认证后被重定向到的活动。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

这是一个非常愚蠢的错误。

DatabaseReference myRef = database.getReference(firebaseAuth.getCurrentUser().getUid());
myRef.setValue( firebaseAuth.getCurrentUser().getUid());

这两行代码始终完全清除您的节点并将值设置为Uid

如果节点在

之前看起来像这样
user123
    - name:"peter"
    - 10:40:50:"10:40:50"

现在看起来像这样

user123:"user123"

您可以将节点的完整内容设置为Uid。如果您只是删除了myRef.setValue(...)声明,那么您的问题就会得到解决。