Я новичок в 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 правильно считывает ключ, но не значение.

вы получаете один и тот же экземпляр два раза один раз, private DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("Users").child(user.getUid()); и второй раз в методе onCreateuserRef = FirebaseDatabase.getInstance().getReference().child(user.getUid());, поэтому я думаю, что вы не даете пользователю второй раз, как этот getReference().child("Users").child(user.getUid());, скажите мне, когда вы попробуете это.
@PeterHaddad Большое спасибо! Я знаю, что это глупо забыть об этом, но через несколько часов я думаю, что слишком устал.
убедитесь, что user.getUid () возвращает правильное значение!




При желании вы можете использовать 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();
Надеюсь это поможет:)
userRef = FirebaseDatabase.getInstance().getReference().child(user.getUid());должен иметьchild("Users")перед идентификатором пользователя