从Firebase实时数据库获取当前用户信息

时间:2019-12-24 16:47:50

标签: java firebase firebase-realtime-database android-activity firebase-authentication

我用Java开发了一个登录应用程序,用户可以使用其电子邮件地址和密码登录。到目前为止,该方法工作正常,但是我遇到的问题是,当我进入家庭活动时,我的UserModel.java为null。这对我来说也很有意义,因为Firebase Auth仅检查电子邮件和密码,而不从实时数据库中选择相关信息。因此,我插入了一个数据快照,由于系统输出了所需的名称,因此它也可以按预期的方式工作。 现在我的问题是如何将这个数据快照分配给我的UserModel,以便我的UserModel不再为空(是吗?!)。在我的HomeActivity的最后一部分中,您可以看到一个字符串,其中应该包含用户名,但是即使我使用现有帐户登录,该字符串也只会显示“示例名称”。由于系统正在打印出正确的名称,因此我相信DataSnapshot可以正常工作。

感谢您的帮助!

我的HomeActivity的一部分

        firebaseAuth = FirebaseAuth.getInstance();
        firebaseDatabase = FirebaseDatabase.getInstance();

        final FirebaseDatabase database =FirebaseDatabase.getInstance();
        DatabaseReference myref=database.getReference("Users").child(firebaseAuth.getUid());

        myref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                UserModel userModel=  dataSnapshot.getValue(UserModel.class);
                System.out.println(userModel.getName());
                currentUser=userModel;
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(HomeActivity.this, ""+databaseError.getCode(), Toast.LENGTH_SHORT).show();
            }
        });


        if(currentUser!=null) {
            Common.setSpanString("Hey, ", currentUser.getName(), txt_user);
        }
        else{
            UserModel userModel = new UserModel(uid,name,address,phone,email,password);
            userModel.setName("Example Name");
            Common.setSpanString("Hey, ", userModel.getName(), txt_user);
        }

UserModel

    private String uid, name, address, phone, email, password;

    public UserModel() {
    }

    public UserModel(String uid, String name, String address, String phone,String email,String password) {
        this.uid = uid;
        this.name = name;
        this.address = address;
        this.phone = phone;
        this.email = email;
        this.password = password;
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() { return password; }

    public void setPassword(String password) {
        this.password = password;
    }
}

我的普通班的一部分

 public static UserModel currentUser;

1 个答案:

答案 0 :(得分:0)

我现在将代码的两个部分放在一起,并能够显示具有正确名称的字符串。但是,Common.CurrentUser不会被初始化,只要属性没问题就没问题。

        firebaseAuth = FirebaseAuth.getInstance();
        firebaseDatabase = FirebaseDatabase.getInstance();

        if(firebaseAuth.getCurrentUser()!=null) {
            final FirebaseDatabase database =FirebaseDatabase.getInstance();
            DatabaseReference myref=database.getReference("Users").child(firebaseAuth.getUid());
            myref.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    UserModel userModel=  dataSnapshot.getValue(UserModel.class);
                    System.out.println(userModel.getName());
                    Common.setSpanString("Hey, ", userModel.getName(), txt_user);
                    currentUser=userModel;
                }
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(HomeActivity.this, ""+databaseError.getCode(), Toast.LENGTH_SHORT).show();
                }
            });
        }else{
            UserModel userModel = new UserModel(uid,name,address,phone,email,password);
            userModel.setName("Example Name");
            Common.setSpanString("Hey, ", userModel.getName(), txt_user);
        }