首页 > 解决方案 > Firebase 实时数据库值检索

问题描述

我正在使用手机号码对用户进行身份验证。现在我想知道,如果用户是第一次使用,那么它将重定向到某些活动,并且如果用户之前已经登录,那么用户可以导航到仪表板屏幕。我该如何解决这个问题?这是我的数据库快照。H在此处输入图像描述 这是我的用户类。

public class User {
    String userName, mobile;
    List<Object> groupIds;
    public User(String userName, String mobile) {
        this.userName = userName;
        this.mobile = mobile;
        groupIds = new ArrayList<>();
        groupIds.add("group1");
    }
    public User() {}

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    public List<Object> getGroupIds() {
        return groupIds;
    }
    public void setGroupIds(List<Object> groupIds) {
        this.groupIds = groupIds;
    }
}

在身份验证成功中,我正在编写以下代码:

   mDatabase.addValueEventListener(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                    showData(dataSnapshot);
                                }
                                @Override
                                public void onCancelled(@NonNull DatabaseError databaseError) {
                                }
                            });
private void showData(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()){
            User uInfo = new User();
            uInfo.setUserName(ds.child("Users").child("112233").getValue(User.class).getUserName());
            uInfo.setMobile(ds.child("Users").child("112233").getValue(User.class).getMobile());
            Log.d(TAG, "showData: name: " + uInfo.getMobile());
            Log.d(TAG, "showData: email: " + uInfo.getUserName());           
        }
    }

标签: javaandroidfirebasefirebase-realtime-database

解决方案


由于您使用的是 firebase 身份验证,因此您可以执行以下操作:

首先在内部if (task.isSuccessful()) {,执行以下操作:

boolean isNew = task.getResult().getAdditionalUserInfo().isNewUser();

如果isNew返回 true,则用户是第一次登录,您可以导航到Profile Activity


如果您希望用户导航到仪表板活动,那么您可以检查用户是否为空:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // User is signed in
} else {
    // No user is signed in
}

如果用户不等于 null,则导航到仪表板活动,否则导航到登录页面。

FirebaseAuth.getInstance().getCurrentUser()如果您调用将返回 null,FirebaseAuth.getInstance().signOut();这意味着如果您不退出,那么它将始终不等于 null,因此您将能够导航到仪表板活动。

检查以下内容以获取更多信息:

https://firebase.google.com/docs/auth/android/manage-users

https://firebase.google.com/docs/reference/android/com/google/firebase/auth/AdditionalUserInfo


推荐阅读