使用用户名(而非电子邮件)登录 Firebase



所以我从某人那里得到了这段代码,但我真的不明白它是如何工作的。 特别是对于用户Bean用户Bean。有什么帮助吗?谢谢。

Query query = databaseReference.child("users").orderByChild("email").equalTo(txvUsername.getText().toString().trim());
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
// dataSnapshot is the "issue" node with all children with id 0
for (DataSnapshot user : dataSnapshot.getChildren()) {
// do something with the individual "issues"
UsersBean usersBean = user.getValue(UsersBean.class);
if (usersBean.password.equals(txvPassword.getText().toString().trim())) {
Intent intent = new Intent(context, MainActivity.class);
startActivity(intent);
} else {
Toast.makeText(context, "Password is wrong", Toast.LENGTH_LONG).show();
}
}
} else {
Toast.makeText(context, "User not found", Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});

在此代码中,您将在节点"users"上查询 Firebase 数据库,并将您的 textView 值与数据库中保存的电子邮件进行比较。 在此之后,您将在异步工作的查询中添加SingleValueEventListener,并且您将在onDataChange((函数中从firebase获得回调,该函数将为您提供DataSnapshot的对象,您可以从该对象中获取值,例如dataSnapshot.getValue((

在您的代码中,您将从 datasnapshot 获取用户节点的所有子节点,并将它们放在一个循环中以将用户的密码与您的 txvPassword 字段匹配。

UserBean是POJO或模型类,其中包含以下字段: 密码、电子邮件等并且您正在将dataSnapshot的值转换为UserBean类,以便您可以轻松地一次保存用户的所有详细信息,如下所示:

UsersBeanusersBean = user.getValue(UsersBean.class(;

并且您可以使用 UserBean 类的所有值来编写进一步的逻辑。 我希望你现在明白了。如果有任何其他疑问,您可以询问!

Firebase 实时数据库以 JSON 形式存储数据。从我所看到的,您的代码适用于(至少(如下所示的数据库:

{
"users": {
"userid1": {
"email": "user1@domain.com",
"password": "passwordforuser1"
},
"userid2": {
"email": "user2@domain.com",
"password": "passwordforuserid2"
}
}
}

此结构中的每个用户都由应用中的UsersBean对象表示。UsersBean类是为数据库的 JSON 结构定制的,并且为每个用户的 JSON 中的每个属性都有一个公共字段或属性。

上述 JSON 最简单的UsersBean如下所示:

public class UsersBean {
public String email;
public String password;
}

因此,在这里,我们用一个(确切(相同名称的公共字段表示每个 JSON 属性。如果您这样做,Firebase 客户端可以使用以下命令将属性从DataSnapshot读取到相应的UsersBean中:

UsersBean usersBean = user.getValue(UsersBean.class);

既然你从某人那里得到了代码,你可能应该要求那个人也给你他们的UsersBean类(和其他 bean 类(。虽然这些通常不难创建,但重复工作是没有意义的。

相关内容

最新更新