【问题标题】:Android firebase retrieve Authenticated user informationAndroid firebase 检索经过身份验证的用户信息
【发布时间】:2019-11-07 16:02:24
【问题描述】:

我正在制作一个 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);
        }
    });

【问题讨论】:

  • 向我们展示您如何验证用户身份。
  • @AlexMamo 你是什么意思?他们必须先注册,然后我从 firebase 数据库中提取他们的信息。我上面有一个例子,比如他们的电子邮件。
  • 向我们展示该代码。
  • @AlexMamo 我刚刚编辑了我的代码

标签: android firebase firebase-authentication


【解决方案1】:

我遇到的问题是我试图从 Firebase 数据库中检索经过身份验证的用户信息,例如他们的名字或姓氏

问题是您试图从FirebaseUser 对象中获取名字和姓氏,而该对象不 包含该信息。在以下代码行中:

firebaseAuth.createUserWithEmailAndPassword(txt_email,txt_password)

您将仅将txt_email 和txt_password 传递给createUserWithEmailAndPassword() 方法,这就是为什么只有该数据可用的原因。如果要获取所有数据,则需要从数据库中获取,因为所有数据仅存在于那里。以下代码可以解决问题:

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 中的输出将是经过身份验证的用户的名字和姓氏。

【讨论】:

  • 感谢您提供的信息。但是我如何在个人资料活动页面中显示名字和姓氏?例如将文本设置为用户的名字?我不想在 logcat 中输出名称我想在他们的个人资料上实际显示它,以便他们可以看到他们在注册时提供的信息
  • 最简单的解决方案是找到您的视图并在onDataChange() 方法中设置文本。 firstNameTextView.setText(txt_firstname);。有用吗?
  • YESSSSS!!!它工作 OMG 你是那个人谢谢你。一段时间以来,我一直在强调这一点。非常感谢,它就像魅力一样
猜你喜欢
  • 2020-12-04
  • 2017-08-02
  • 2018-01-27
  • 2019-05-23
  • 2023-03-31
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
相关资源
最近更新 更多