【问题标题】:Android studio firebase - Access user info using UIDAndroid studio firebase - 使用 UID 访问用户信息
【发布时间】:2020-04-14 01:55:23
【问题描述】:

几个小时以来,我一直在尝试并努力根据使用用户的 UID 来打印其余的用户属性。这是“userRegistration”表在我的 firebase 数据库中的样子:

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!




}

有人可以帮我吗?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    iD 在统计上是唯一的。所以你不需要使用 for 循环来迭代用户数据。只需在 child 中提供 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);
            }
        }
    

    【讨论】:

      【解决方案2】:

      尝试以下方法:

         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。然后你可以迭代和检索数据

      【讨论】:

      • 为什么是orderby?最好只为孩子提供用户 ID
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 2021-02-03
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2017-12-14
      相关资源
      最近更新 更多