Android Studio Firebase-使用UID访问用户信息

时间:2019-12-22 12:14:56

标签: java android firebase firebase-realtime-database nosql

几个小时以来,我一直在努力获取其余用户属性,以便根据使用用户的UID进行打印。这是我的Firebase数据库中“ userRegistration”表的外观:

UserRegistration Table on firebase

这是我尝试的示例代码,当尝试访问其他表中的值时,它实际上可以完美地工作,但是当尝试访问“ UserRegistration”表中的数据时,则不能工作:

     public void getRestOfTheUserAttributes(){
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
     String the_uid = user.getUid();

    DatabaseReference additionalUserInfoRef = rootRef.child("UserRegistration");
    Query userQuery = additionalUserInfoRef.orderByChild("user_id").equalTo(the_uid);

    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                Map<String, Object> map = new HashMap<>();

                String userName = ds.child("username").getValue(String.class);
                String userMail = ds.child("e-mail").getValue(String.class);
                String nameOfUser = ds.child("name").getValue(String.class);

           }
           }

再次:如果我尝试访问其他表中的数据而不是“ UserRegistration”表上的数据,则以上这段代码非常有效!

此外,我已经创建了一种非常简单的方法来尝试获取其余值,但也不起作用。

public void getUserProfile(){
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    String the_id = user.getUid(); //works perfectly
    String name = user.getDisplayName(); // returns null
    String email = user.getEmail();  //works perfectly!




}

有人可以帮助我吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

尝试以下操作:

   DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
     String the_uid = user.getUid();

    DatabaseReference additionalUserInfoRef = rootRef.child("UserRegistraion");
    Query userQuery = additionalUserInfoRef.orderByKey().equalTo(the_uid);

    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {


                String userName = ds.child("username").getValue(String.class);
                String userMail = ds.child("e-mail").getValue(String.class);
                String nameOfUser = ds.child("name").getValue(String.class);

           }
           }

首先添加对节点UserRegistraion的引用,然后根据uid检索数据,您需要使用orderByKey()并检查其是否等于当前用户的ID。然后,您可以迭代并检索数据

答案 1 :(得分:0)

iD在统计上是唯一的。因此,您无需使用for循环即可从用户数据中进行迭代。只需在子项中提供user_id,您就可以直接检索该用户数据

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String the_uid = user.getUid();
DatabaseReference additionalUserInfoRef = rootRef.child("UserRegistraion").child(the_uid);
ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String userName = dataSnapshot.child("username").getValue(String.class);
            String userMail = dataSnapshot.child("e-mail").getValue(String.class);
            String nameOfUser = dataSnapshot.child("name").getValue(String.class);
        }
    }