Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用用户名登录Firebase(非电子邮件)_Javascript_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Javascript 使用用户名登录Firebase(非电子邮件),javascript,java,android,firebase,firebase-realtime-database,Javascript,Java,Android,Firebase,Firebase Realtime Database,所以我从某人那里得到了这个代码,但我真的不明白它是如何工作的。特别是对于UsersBean UsersBean。有什么帮助吗?多谢各位 Query query = databaseReference.child("users").orderByChild("email").equalTo(txvUsername.getText().toString().trim()); query.addListenerForSingleValueEvent(new ValueEventListener() {

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

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) {

    }
});

在这段代码中,您正在“用户”节点上查询firebase数据库,并将您的textView值与数据库中保存的电子邮件进行比较。 在此之后,您将在查询上添加SingleValueEventListener,该查询异步工作,您将在onDataChange()函数中从firebase获得回调,该函数将为您提供DataSnapshot对象,并且您可以像DataSnapshot.getValue()一样从该对象获取值

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

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

UsersBean UsersBean=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类)。虽然这些通常不难创建,但复制工作是没有意义的。

对于用户来说仍然有问题。它返回“无法从“UsersBeans”解析symboll。我是否应该为其创建新类?首先,请在firebase控制台中查看users表的字段,然后使用所有同名字段创建此类。然后,它就可以工作了