我是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中,它基本上是用户在正确认证后被重定向到的活动。 谢谢你的帮助。
答案 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(...)
声明,那么您的问题就会得到解决。