Android firebase получить аутентифицированную информацию о пользователе - PullRequest
0 голосов
/ 07 ноября 2019

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

 //Register.java
       fname=(EditText)findViewById(R.id.your_name);
    lname=(EditText)findViewById(R.id.your_last_name);
    email=(EditText)findViewById(R.id.signupemail);
    password=(EditText)findViewById(R.id.signuppassword);

    signinbutton=(TextView) findViewById(R.id.have_an_account_button);
    signupbutton=(TextView) findViewById(R.id.signupbutton1);

    firebaseAuth=FirebaseAuth.getInstance();

    databaseReference=FirebaseDatabase.getInstance().getReference("businessowners");

    signupbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            final String txt_firstname=fname.getText().toString();
            final String txt_lastname=lname.getText().toString();
            final String txt_email=email.getText().toString();
            final String txt_password=password.getText().toString();

            if(txt_firstname.isEmpty() ){
                Toast.makeText(RegisterActivity.this,"Name required",Toast.LENGTH_SHORT).show();


            }



            if(txt_email.isEmpty()){

                Toast.makeText(RegisterActivity.this,"Email required",Toast.LENGTH_SHORT).show();

            }

            if(txt_password.isEmpty()){
                Toast.makeText(RegisterActivity.this,"Password",Toast.LENGTH_SHORT).show();


            }



            firebaseAuth.createUserWithEmailAndPassword(txt_email,txt_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if(task.isSuccessful()){

                       businessowners information=new businessowners(

                                txt_firstname,
                                txt_lastname,
                                txt_email
                        );

                        FirebaseDatabase.getInstance().getReference("businessowners").child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                .setValue(information).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                Toast.makeText(RegisterActivity.this,"Registration successful",Toast.LENGTH_SHORT).show();

                                Intent inty=new Intent(RegisterActivity.this,LoginActivity.class);
                                startActivity(inty);
                            }
                        });

                    }else if(task.getException() instanceof FirebaseAuthUserCollisionException){

                      email.setError("Email exist");
                      email.requestFocus();

                    }
                }
            });


        }
    });


 //Profile.java
txt=(EditText)findViewById(R.id.edit_email);
    txt1=(EditText)findViewById(R.id.edit_firstname);

    signoutbtn=(TextView)findViewById(R.id.signout);

    firebaseAuth=FirebaseAuth.getInstance();

    DatabaseReference ref=FirebaseDatabase.getInstance().getReference("user");

    String UID=FirebaseAuth.getInstance().getCurrentUser().getUid();


    FirebaseUser firebaseUser=firebaseAuth.getCurrentUser();

    //Get users email
    String user_info1=firebaseUser.getEmail();

    //display users email
    txt.setText(user_info1);







    signoutbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            firebaseAuth.signOut();
            finish();
            Intent inty=new Intent(ProfileActivity.this,LoginActivity.class);
            startActivity(inty);
        }
    });

1 Ответ

0 голосов
/ 07 ноября 2019

Проблема, с которой я столкнулся, заключается в том, что я пытаюсь получить информацию об аутентифицированных пользователях из базы данных Firebase, такую ​​как их имя или фамилия

Проблема в том, что вы пытаетесьполучить имя и фамилию из объекта FirebaseUser, который не содержит эту информацию. В следующей строке кода:

firebaseAuth.createUserWithEmailAndPassword(txt_email,txt_password)

Вы переходите к методу createUserWithEmailAndPassword() only txt_email и txt_password, и поэтому доступны только эти данные. Если вы хотите получить все данные, вам нужно получить их из базы данных, потому что все эти данные существуют только там. Следующий код справится с задачей:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("businessowners").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String txt_firstname = dataSnapshot.child("txt_firstname").getValue(String.class);
        String txt_lastname = dataSnapshot.child("txt_lastname").getValue(String.class);
        Log.d(TAG, txt_firstname + " " + txt_lastname);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
uidRef.addListenerForSingleValueEvent(valueEventListener);

Выводом в logcat будет имя и фамилия аутентифицированного пользователя.

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