gpt4 book ai didi

java - 组织 firebase 数据

转载 作者:行者123 更新时间:2023-11-30 02:23:07 28 4
gpt4 key购买 nike

我正在使用 Firebase Auth 和 Firebase 数据库来存储学生的个人资料和学生报告。

当用户注册时,他们输入电子邮件、密码、学校名称、学年、学校纪律。我使用电子邮件和密码进行身份验证,但其余信息以唯一 ID 存储在数据库中,如下所示:

enter image description here

对于报告,每个学生可以输入多个条目,每个条目都有其唯一的 ID,如下所示:

enter image description here

这是我的问题:

  1. 学生登录后,我如何找到他们的个人资料信息,因为家长是唯一的 ID。换句话说,有没有办法在数据库中搜索该学生的电子邮件(例如,图中的 mido4@hotmail.com)并从中获取学生的姓名(在本例中为 Emina Osman)?

  2. 获得学生姓名后,如何搜索该学生在数据库中保存的所有条目?对于学生的每个条目,都会保存学生姓名。

  3. 不确定我设置数据库的方式是否理想,那么有更好的方法吗?

感谢您的宝贵时间!任何帮助将非常感激!

最佳答案

  1. 是的,是的。实现这一目标的最简单方法是稍微更改数据库结构。因此,我建议您使用电子邮件地址,而不是使用由 push() 方法生成的推送 key 作为唯一标识符。它也是独特且易于使用的。这样做的好处是,您可以在数据库中搜索该特定电子邮件。您的数据库结构应如下所示:

    flashscreen-1d252
    |
    --- Users
    |
    --- mido4@hotmail,com
    | |
    | --- //User Details
    |
    --- mido5@hotmail,com
    |
    --- //User Details

请注意,Firebase 不允许在键中使用 .(点)等符号。正如您可能看到的,我已将 . 点更改为 ,(逗号)。我使用以下方法实现了这一点:

String encodeUserEmail(String userEmail) {
return userEmail.replace(".", ",");
}

要搜索用户并获取名称,只需在 Users 节点上添加一个监听器,如下所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child("Users").child("mido4@hotmail,com");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()) {
String firstName = dataSnapshot.child("firstname").getValue(String.class);
String lastName = dataSnapshot.child("lastname").getValue(String.class);
Log.d("TAG", firstName + " " + lastName);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(eventListener);

输出将是:Emina Osman

  • 您必须在电子邮件地址之后进行搜索,而不是在姓名之后进行搜索。
  • 上面已经回答了。这种数据库结构更加高效。
  • 编辑:基于使用电子邮件地址与 uid,关于此答案还有 2 个其他问题。

    1. 如果用户决定删除其帐户,并在一段时间后决定返回并尝试再次登录,该怎么办?如果我们使用电子邮件地址,则不会发生任何事情。如果我们使用uid,当用户第二次登录时,会生成另一个uid,这显然与第一次不同,此时此刻你就有麻烦了,因为即使他是同一个用户,他也会被视为新用户。

    2. 如果用户的电子邮件地址发生变化怎么办?恕我直言,只有您决定更改电子邮件才能更改。就我个人而言,我已经很多年没有更改过我的电子邮件地址,但我已经从数百个应用程序中删除了数百个帐户。即使您更改了电子邮件地址,也不会有太大问题。您登录您的应用程序,更改电子邮件地址即可。您还将在该应用程序中拥有所有历史记录。拥有唯一标识符 uid,万一您删除帐户并再次回来,您将从零开始。

    关于java - 组织 firebase 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46309002/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com