Firebase 实时数据库值检索

Posted

技术标签:

【中文标题】Firebase 实时数据库值检索【英文标题】:Firebase Realtime Database Value Retrieval 【发布时间】: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而不是手机号码? 【参考方案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

【讨论】:

以上是关于Firebase 实时数据库值检索的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 实时数据库:如何在按值排序后围绕特定键检索 10 条记录?

无法从从 Firebase 实时数据库中检索数据以在以下代码行中使用它的方法中获取返回值 [重复]

从firebase实时数据库IOS Swift中检索数据

如何从 Firebase 实时数据库中检索特定数据?

无法从firebase实时数据库检索数据到recyclerview [重复]

如何使用颤振从firebase实时检索数据