Невозможно получить данные CurrentUser в Firebase Android - PullRequest
0 голосов
/ 01 июля 2019

Со ссылкой на этот вопрос Я пытаюсь получить текущие данные пользователя из базы данных FireBase с помощью Android.

Это мой код:

auth = FirebaseAuth.getInstance();
    databaseReference = FirebaseDatabase.getInstance().getReference();
    FirebaseUser user = auth.getCurrentUser();

    databaseReference.child("users").child(user.getUid()).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot){
            String userID = (String) dataSnapshot.child("name").getValue();
            Log.d("TAG", "Name: " + userID);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}

    });

Здесь каждый разЯ запускаю приложение, которое дает мне значение NULL в результате, даже если пользователь вошел в систему.

LogCat:

D/TAG: Name: null

Моя база данных: enter image description here

Пожалуйста, помогите мне получить имя узла базы данных.

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

В вашей базе данных вы не используете userid.Этот идентификатор -Li1boDBTPV_59sXL7XI является случайным идентификатором, сгенерированным методом push(), и поэтому вы получаете ноль.

Вам необходимо изменить способ добавления данных следующим образом:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users");
FirebaseAuth auth     = FirebaseAuth.getInstance();
FirebaseUser user     = auth.getCurrentUser();

ref.child(user.getUid()).child("name").setValue("Darryl Fernand");
ref.child(user.getUid()).child("email").setValue("fernsdarryyl@gmail.com");
ref.child(user.getUid()).child("gender").setValue("male");

Тогда вы сможете получить данные, используя userId.

1 голос
/ 01 июля 2019

Получите имя, выполнив это следующим образом -

 FirebaseAuth auth = FirebaseAuth.getInstance();
            FirebaseUser user = auth.getCurrentUser();
            String uId = firebaseAuth.getCurrentUser().getUid() + "";
            FirebaseDatabase database = FirebaseDatabase.getInstance();
            DatabaseReference myRef = database.getReference("users");

                        myRef.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {

                                boolean hasId = dataSnapshot.hasChild(uId);

                                if(hasId){

                                    String name = dataSnapshot.child("name").getValue().toString() + "";
                                }
                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {
                            }
                        }); 

Это должно работать нормально.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...