英文:
How to show each users' data based on their Google account - Firebase
问题
我目前正在使用Android Studio构建一个待办事项应用程序。我在使用Firebase数据库时遇到了一个问题。我的目标是,每个用户根据他们的Google登录拥有一个唯一的标识符,以便只能查看自己的数据。目前,在我的应用程序中,每个人都可以看到任何人的任务。在Firebase上,我正在使用实时数据库,通过一个名为“Users”的子级和另一个名为Task +随机数字的子级来指定它。此外,我已经在我的应用程序启动时添加了Google登录按钮。
当前数据库:
插入图像描述
我希望层次结构的示例:
插入图像描述
英文:
I'm currently building a to-do app on Android Studio. I'm facing an issue with my Firebase database. What I'm trying to do is, each user to have a unique id based on their google sign in, in order to see only their own data. Currently, on my app, everyone can see anyone's' tasks. On Firebase I'm using the Realtime Database, specifying it by one child of "Users" and another one of Task + a random number. Also, I've already added the google sign in button on the launch of my app.
Current Database:
enter image description here
Example of how my hierarchy wants to be:
enter image description here
答案1
得分: 0
根据您的评论,要获取与特定用户对应的仅 Task 对象,请使用以下代码行:
String userId = "User-13294";
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference tasksRef = rootRef.child("Users").child(userId).child("Tasks");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot taskSnapshot : dataSnapshot.getChildren()) {
String title = taskSnapshot.child("title").getValue(String.class);
Log.d("TAG", title);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); // 不要忽略潜在的错误!
}
};
tasksRef.addListenerForSingleValueEvent(valueEventListener);
因为 User-13294
只有一个 Task,logcat 中的结果将只有一个标题:
Swimming
英文:
According to your comments, to get only the Task objects the correspond to a particular user, please use the following lines of code:
String userId = "User-13294";
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference tasksRef = rootRef.child("Users").child(userId).child("Tasks");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot taskSnapshot : dataSnapshot.getChildren()) {
String title = taskSnapshot.child("title").getValue(String.class);
Log.d("TAG", title);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
}
};
tasksRef.addListenerForSingleValueEvent(valueEventListener);
Because User-13294
has only one Task, the result in the logcat will be only one title:
Swimming
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论