如何在firebase for android中使用身份验证UId从用户节点获取用户信息?

如何在firebase for android中使用身份验证UId从用户节点获取用户信息?,android,firebase,firebase-realtime-database,sharedpreferences,Android,Firebase,Firebase Realtime Database,Sharedpreferences,我使用firebase电子邮件/密码身份验证进行登录。我使用一个用户节点来存储用户数据。我可以使用共享首选项将身份验证Uid传递给不同的活动。如何使用此UId获取用户信息,如姓名、电话等 注意:用户信息存储在用户节点中,UId来自身份验证 我尝试了以下方法,但UName、UMobile和UEmail显示空值。我可以正确地获取UId FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser() ; String U

我使用firebase电子邮件/密码身份验证进行登录。我使用一个用户节点来存储用户数据。我可以使用共享首选项将身份验证Uid传递给不同的活动。如何使用此UId获取用户信息,如姓名、电话等

注意:用户信息存储在用户节点中,UId来自身份验证

我尝试了以下方法,但UName、UMobile和UEmail显示空值。我可以正确地获取UId

 FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser() ;
 String UId = currentUser.getUid();
 String UName = currentUser.getDisplayName();
 String UMobile = currentUser.getPhoneNumber();
 String UEmail = currentUser.getEmail();

存储用户数据时,请将其与uid一起存储。就像json对象一样。uid作为键,用户数据作为值。然后可以使用此uID获取firebaseDatabasereference

 {
"users": {
"uid_of_first_user": {
  "username": "usernam",
  "email": "bobtony"
},
 "uid_of_second_user": {
  "username": "usernam",
  "email": "bobtony"
},

}}
使用以下代码获取值

  FirebaseDatabase database = FirebaseDatabase.getInstance();
  DatabaseReference myRef = database.getReference("users/uid_of_first_user");

   // Read from the database
   myRef.addValueEventListener(new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot dataSnapshot) {
    // This method is called once with the initial value and again
    // whenever data at this location is updated.
    User value = dataSnapshot.getValue(User.class);
    Log.d(TAG, "Value is: " + value);
  }

   @Override
    public void onCancelled(DatabaseError error) {
    // Failed to read value
    Log.w(TAG, "Failed to read value.", error.toException());
}
}))

创建User.class。每个变量的名称必须与firebase中的相同。而且不要忘记创建默认构造函数。就像下面

  public class User {
     String username;
     String email;

     public User() {
     }
     public User(String username, String email) {
     this.username = username;
     this.email = email;
     }

   }
如果要获取所有用户的数据。遵循下面的代码

  FirebaseDatabase database = FirebaseDatabase.getInstance();
  DatabaseReference myRef = database.getReference("users");

  myRef.addValueEventListener(new ValueEventListener() {
  @Override
   public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
        // TODO: handle the post
          User value = userSnapshot.getValue(User.class);
    }
 }

  @Override
  public void onCancelled(DatabaseError databaseError) {
    // Getting Post failed, log a message
    Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
    // ...
  }
 });

请看一下本指南,注意FirebaseAuth.AuthStateListener()

如果使用UID和其他自定义字段将用户存储在节点中,则使用FirebaseAuth无法获取这些字段。 您需要使用此UID查询包含用户的树,并解析用户数据快照。
使用FirebaseAuth只能检索UID。

重写AuthStateChanged侦听器:

mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

            if (firebaseAuth.getCurrentUser() != null) {

                //show_snackbar("logged on: " + firebaseAuth.getCurrentUser().getEmail(), Snackbar.LENGTH_SHORT);

                Uri img = firebaseAuth.getCurrentUser().getPhotoUrl();
                Picasso.with(context).load(img).into(account_image);

                account_name.setText(firebaseAuth.getCurrentUser().getDisplayName());

            }
        }
    };

检查此代码。它不会运行,但如果您了解Firebase,您将很容易理解它。阅读评论。或者下载完整的代码,获取json文件并自己测试。

您是否在AuthStateChanged上实现了
侦听器?我需要在哪里实现?您是否实现了
实现了
任何内容?我刚刚在auth.signInWithEmailAndPassword(电子邮件,密码)中使用了上述代码您可以发布那个
code
?这里我也使用UId作为数据库中用户的唯一id。现在我想获取用户的详细信息,如姓名、电话等,并将其存储为全局共享首选项。如果是,如何查询相同的信息?