Android не читает базу данных Firebase

Я новичок в Android, и эта штука сводит меня с ума. Дело в том, что в моем приложении у меня есть логин на основе Firebase Auth с использованием электронной почты / пароля. Я хотел добавить имя пользователя для каждого зарегистрированного пользователя, и все прошло хорошо.

Проблема в том, что я пытаюсь прочитать имя пользователя из базы данных, которая возвращает null.

Это база данных:

Android не читает базу данных Firebase

И это мой код, чтобы попытаться прочитать поле 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 правильно считывает ключ, но не значение.

Android не читает базу данных Firebase

userRef = FirebaseDatabase.getInstance().getReference().child(user.get‌​Uid()); должен иметь child("Users") перед идентификатором пользователя
Peter Haddad 08.04.2018 18:29

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

badarshahzad 08.04.2018 18:30

@PeterHaddad Большое спасибо! Я знаю, что это глупо забыть об этом, но через несколько часов я думаю, что слишком устал.

Miki193 08.04.2018 18:36

убедитесь, что user.getUid () возвращает правильное значение!

iamkdblue 08.04.2018 18:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
120
1

Ответы 1

При желании вы можете использовать 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();

Надеюсь это поможет:)

Другие вопросы по теме