Android没有阅读Firebase数据库

时间:2018-04-08 16:25:30

标签: java android database firebase

我对Android很新,这件事让我疯狂。问题是,在我的应用程序中,我有一个基于Firebase Auth的登录,使用电子邮件/密码。我想为每个注册用户添加一个用户名,并且进展顺利。

问题是当我尝试从数据库中读取用户名时,返回null

这是数据库:

Database

这是我尝试阅读username字段的代码:

private FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
private DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("Users").child(user.getUid());

private TextView uid, mail, username;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_perfil);

    user = FirebaseAuth.getInstance().getCurrentUser();
    userRef = FirebaseDatabase.getInstance().getReference().child(user.getUid());
    uid = findViewById(R.id.userID);
    mail = findViewById(R.id.Mail);
    username = findViewById(R.id.userPerfil);

    userRef.child("username").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
           String name = dataSnapshot.getValue(String.class);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

如您所见,dataSnapshot正确读取密钥,但不是值。

here

1 个答案:

答案 0 :(得分:0)

如果您愿意,可以使用UpdateProfileChangeRequest来保存用户名。

看看下面的代码,我在我的应用程序中使用了相同的代码:

FirebaseUser mCurrentUser=mFirebaseAuth.getCurrentUser();
UserProfileChangeRequest userProfileChangeRequest= new UserProfileChangeRequest.Builder()
                                    .setDisplayName(signUpUsername)
                                    .build();
if (mCurrentUser != null) {
    mCurrentUser.updateProfile(userProfileChangeRequest).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {

            Toast.makeText(SignupActivity.this,"Username Added",Toast.LENGTH_SHORT).show();
        }
    });
}

并使用以下代码检索用户名:

  FirebaseUser firebaseUser=mFirebaseAuth.getCurrentUser();
  String username=firebaseUser.getDisplayName();

希望这会有所帮助:)