【问题标题】:Firebase Realtime Database Value RetrievalFirebase 实时数据库值检索
【发布时间】:2019-11-28 08:14:18
【问题描述】:

我正在使用手机号码对用户进行身份验证。现在我想知道,如果用户是第一次使用,那么它将重定向到某些活动,并且如果用户之前已经登录,那么用户可以导航到仪表板屏幕。我该如何解决这个问题? 这是我的数据库快照。 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());           
        }
    }

【问题讨论】:

  • 如果用户第一次也去仪表板或其他地方?
  • 如果用户第一次登录,则导航到个人资料活动以设置他/她的个人资料。但是如果用户已经有个人资料,那么用户将重定向到仪表板活动。@PeterHaddad
  • 你在使用 Firebase 身份验证吗?
  • 是的,有手机号码。 @PeterHaddad
  • 你为什么不用firebase uid而不是手机号码?

标签: java android firebase firebase-realtime-database


【解决方案1】:

由于您使用的是 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
}

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

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

查看以下内容了解更多信息:

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

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

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2019-04-16
    • 2020-12-09
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多