如何从 firebase 数据库中获取登录用户的数据

Posted

技术标签:

【中文标题】如何从 firebase 数据库中获取登录用户的数据【英文标题】:How can I get data of logged in user from firebase database 【发布时间】:2018-11-20 00:04:49 【问题描述】:

我需要有关此代码的帮助。

如何从 firebase 数据库中获取登录的用户数据?

这些是我的代码:

public void getUserInfo()
    mFirebaseDatabase = FirebaseDatabase.getInstance();
    mUserDatabase = mFirebaseDatabase.getReference("users");
    FirebaseUser user = mAuth.getCurrentUser();
    mUserDatabase.child(userID).addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange( com.google.firebase.database.DataSnapshot datasnapshot) 
            for (DataSnapshot dataSnapshot : datasnapshot.getChildren()) 
                User user1 = dataSnapshot.getValue(User.class);

                String firstname = user1.getFirstName();
                String secondname = user1.getSecondName();
                String email = user1.getEmail();
                String enrollment = user1.getEnrollnumber();
                String branch = user1.getBranch();
                String college = user1.getCollege();

                First_name.setText(firstname);
                Second_name.setText(secondname);
                tx_Email.setText(email);
                Enroll_number.setText(enrollment);

            
        
        @Override
        public void onCancelled(DatabaseError firebaseError) 
            /*
             * You may print the error message.
             **/
        
    );


任何帮助将不胜感激!

【问题讨论】:

我的最佳猜测答案如下。如果这不是问题的原因:1)将实际问题添加到您的问题中。现在还不清楚您共享的代码有什么问题。 2)将/users/$uid的JSON添加到您的问题中(作为文本,请不要截图)。您可以通过单击Firebase Database console 中的“导出 JSON”链接来获取此信息。 【参考方案1】:

据我所知,您正在将侦听器附加到单个用户的数据。这意味着您不需要在onDataChange 中循环dataSnapshot.getChildren()

所以:

public void onDataChange( com.google.firebase.database.DataSnapshot snapshot) 
    User user1 = snapshot.getValue(User.class);

    String firstname = user1.getFirstName();
    String secondname = user1.getSecondName();
    String email = user1.getEmail();
    String enrollment = user1.getEnrollnumber();
    String branch = user1.getBranch();
    String college = user1.getCollege();

    First_name.setText(firstname);
    Second_name.setText(secondname);
    tx_Email.setText(email);
    Enroll_number.setText(enrollment);

【讨论】:

【参考方案2】:

试试这个,在我的情况下,我在 firebase 中的数据库被称为“用户”,其中用户 ID 是每个用户的 ID,使用这个用户 ID 我过滤每个用户示例的数据(姓名、电子邮件...等)

您需要编写一个 for 来迭代所有字段,然后获得您需要的位置,例如 position[0] = name, position[1] = email...等

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference idRef = rootRef.child("Users").child(userID);

final List<String> lstItems= new ArrayList<String>();
for(DataSnapshot ds : dataSnapshot.getChildren()) 
    String values = (String) ds.getValue();
    lstItems.add(values);


Log.d(TAG, "NAME: " + lstItems.get(0).toString());
Log.d(TAG, "EMAIL: " + lstItems.get(1).toString());

然后打印出来

email = lstItems.get(0).toString();
name = lstItems.get(1).toString();

希望对你有帮助

【讨论】:

以上是关于如何从 firebase 数据库中获取登录用户的数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Firebase 3 从 FIRUser 获取创建日期和上次登录日期

如何从 firebase.auth().onAuthStateChanged 中提取数据

从登录用户 Flutter/Firebase 获取文档列表

Flutter:如何从谷歌登录firebase获取生日? (安卓和iOS)

如何使用 Angular 从 Firebase 中删除用户帐户

如何通过异步调用 uid 从 Firebase 查询数据