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

时间:2018-04-12 10:51:19

标签: android firebase firebase-realtime-database sharedpreferences

我使用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();

4 个答案:

答案 0 :(得分:1)

存储用户数据时,请使用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());
    // ...
  }
 });

答案 1 :(得分:0)

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

https://www.androidhive.info/2016/06/android-getting-started-firebase-simple-login-registration-auth/

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

答案 2 :(得分:0)

覆盖onAuthStateChanged侦听器:

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());

            }
        }
    };

答案 3 :(得分:0)

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