Как получить пользовательские данные аутентифицированных пользователей в базе данных Firebase Realtime с помощью Android - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь получить данные профиля текущего пользователя, вошедшего в систему, из базы данных Firebase Realtime. Я аутентифицировал своих пользователей, используя электронную почту и пароль. Затем я сохранил данные регистрации в базе данных в виде объекта следующим образом: (Весь этот код включен в OnCreate в SignUpActivity). Я сохранил данные как Пользователь объекты. Мой пользовательский класс модели имеет методы получения и установки, параметризованные и пустые конструкторы.

´´´´// Initialize FirebaseAuth and DatabaseReference
mFirebaseAuth = FirebaseAuth.getInstance();
mDatabaseRef = FirebaseDatabase.getInstance().getReference("users");

mFirebaseAuth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(SignUpActivity.this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {

                    //save all data to database

                   String mUserId = mFirebaseAuth.getCurrentUser().getUid();

                        User user = new User(email, name,tel, address1,address2,user_type, mUserId);

                        //add to database
                        mDatabaseRef.child(mUserId).setValue(user);
//open main activity
Intent intent = new Intent(SignUpActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

Таким образом, mUserId - это userId аутентифицированных пользователей. Моя структура базы данных выглядит следующим образом, и по умолчанию применяются правила публикации c.

wish-store-42facaddclose
    users
        2GbVFSMFrihqVJ8OAXBa56owNW93
            address1: "juja"
            address2:  "Town"
            email:  "a.bea@gmail.com"
            phone:  "+237638256239"
            userId:  "2GbVFSMFrihqVJ8OAXBa56owNW93"
            userName:  "Beatrice Njambi"
            userType:  "Buyer Account"

Теперь, чтобы получить данные в MainActivity, это код, который я использую в onCreate:

//instantiate firebaseAuth
mFirebaseAuth = FirebaseAuth.getInstance();

Тогда onStart;

userName = (TextView) findViewById(R.id.userNameHeader);

//check to see if user is logged in
mFirebaseUser = mFirebaseAuth.getCurrentUser();
if (mFirebaseUser == null) {
    //the user is not logged in, start login activity
    loadLogInView();
} else {


    String mUserId = mFirebaseUser.getUid();

    root = FirebaseDatabase.getInstance().getReference();

    DatabaseReference mDatabaseRef = root.child("users").child(mUserId);

    ValueEventListener profileListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);
            userName.setText(user.getUserName());
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.i("Read failed", databaseError.getMessage());
        }
    };
    mDatabaseRef.addValueEventListener(profileListener);


}

Я попытался отладить, и он говорит, что есть исключение нулевого указателя для mUserId . Таким образом, проблема заключается в правильной ссылке на userId аутентифицированных пользователей. Пожалуйста, помогите, я действительно не понимаю, что я делаю неправильно.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 08 января 2020

Попробуйте добавить ValueEventListener для объекта базы данных напрямую, а не устанавливать его позже. Попробуйте проверить, если вы инициализировали FirebaseAuth.

0 голосов
/ 08 января 2020
        mAuth = FirebaseAuth.getInstance();
        mAuth.getCurrentUser();

        FirebaseUser mUser = mAuth.getCurrentUser();

        String uId = mUser.getUid();
        String personName=mUser.getDisplayName();
        String personEmail=mUser.getEmail();
        String personPhoto=mUser.getPhotoUrl();



попробуйте

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