我对Android很新,这件事让我疯狂。问题是,在我的应用程序中,我有一个基于Firebase Auth的登录,使用电子邮件/密码。我想为每个注册用户添加一个用户名,并且进展顺利。
问题是当我尝试从数据库中读取用户名时,返回null
。
这是数据库:
这是我尝试阅读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正确读取密钥,但不是值。
答案 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();
希望这会有所帮助:)