如何使用 Firebase 身份验证显示 Firebase 数据库中的用户特定数据?



我将首先分享我的数据库结构:

Timetable
Ladybridge High School, Bolton, UK
Name: Ladybridge High School
Town: Bolton
Country: UK
User
Email: rafansari97@gmail.com
First Name: Raf
Last Name: Ansari
St James High School, Bolton, UK
Name: St James High School
Town: Bolton
Country: UK
User
Email: raf-a@live.co.uk
First Name: Raf
Last Name: Ansari

现在,假设 rafansari97@gmail.com 已成功通过Firebase身份验证登录。我将如何在不知道完整路径引用的情况下检索嵌套在上面的数据(名称:Ladybridge 高中,城镇:Bolton 等(,即我只能指定"时间表"作为路径?我知道我可以构建一个单独的树,将用户电子邮件与第二个节点相关联,但如果可能的话,我想避免该解决方案。

对于当前的数据结构,需要使用查询来查找与电子邮件地址匹配的节点。

像这样:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Timetable");
Query query = ref.orderByChild("User/Email").equalTo("rafansari97@gmail.com");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
System.out.println(userSnapshot.getKey()); // Ladybridge High School, Bolton, UK
System.out.println(userSnapshot.child("Name").getValue(String.class)); // Ladybridge High School
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
}

那里需要for循环,因为多个节点可能与给定的电子邮件地址匹配。即使确保只有一个匹配项,API 也无法知道这一点,因此您需要循环。

我认为您的数据库模型不正确。注册用户时,每个唯一用户都会获得自己的唯一 ID。使用那些可以通过 FirebaseUser.getUniqueId(( 获取的唯一 ID 对数据进行建模。如果这样做,它将如下所示:

Timetable
ASDNJ2332IWQE23ZXWQ:    
School: Ladybridge High School, Bolton, UK
Name: Ladybridge High School
Town: Bolton
Country: UK
User
Email: rafansari97@gmail.com
First Name: Raf
Last Name: Ansari
SDASFSDGSEGEEFGEGRG:
School: St James High School, Bolton, UK
Name: St James High School
Town: Bolton
Country: UK
User
Email: raf-a@live.co.uk
First Name: Raf
Last Name: Ansari

因此,通过这种方式,您可以获取用户 unqiue id 并使用该字符串搜索您的数据库

最新更新