当前位置: 首页 > 知识库问答 >
问题:

创建新的Firebase电子邮件密码用户帐户后,Firebase用户显示名称不会在活动中显示?

经正祥
2023-03-14

我使用下面显示的简单电子邮件密码进行注册活动以在Firebase上创建新用户

创建帐户活动

公共类CreateCountActivity扩展了AppCompatActivity{

private ProgressDialog mprogress;
private RelativeLayout signUpactivity;

FirebaseUser user;

private Button msignUp;
public EditText mName,mEmail,mPassword,mCon_Password,mschl_name;

Spinner gender;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_creat_acc);

    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

    mAuth = FirebaseAuth.getInstance();
    mprogress = new ProgressDialog(this);

    msignUp = (Button) findViewById(R.id.signUp);

    signUpactivity = (RelativeLayout) findViewById(R.id.activity_signUp);

    mName = (EditText) findViewById(R.id.namefield);
    mEmail = (EditText) findViewById(R.id.emailField);
    mPassword = (EditText) findViewById(R.id.passwordField);
    mschl_name = (EditText) findViewById(R.id.sname);

    String[] option = new String[]{
            "Male", "Female"
    };

    gender = (Spinner) findViewById(R.id.gender);
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, option);
    arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    gender.setAdapter(arrayAdapter);

    msignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(isNetworkAvailable()){

                mprogress.setMessage("Creating Account...");
                mprogress.show();
                mprogress.setCanceledOnTouchOutside(false);
                mprogress.setCancelable(false);
                createAccount();

            }else{

                Snackbar.make(signUpactivity, "Network UnAvailable", Snackbar.LENGTH_SHORT).show();

            }
        }
    });

}

private boolean isNetworkAvailable() {

    ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = manager.getActiveNetworkInfo();

    return networkInfo != null && networkInfo.isConnected();

}

View focusview = null;
boolean cancel = false;

private void createAccount(){

    final String name = mName.getText().toString();
    String email = mEmail.getText().toString();

    String password = mPassword.getText().toString();
    final String gendertxt = gender.getSelectedItem().toString();
    final String schl_name = mschl_name.getText().toString();

    String edu_email = email+"@edutree.com";

        if (isNetworkAvailable()){

            mAuth.createUserWithEmailAndPassword(edu_email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(Task<AuthResult> task) {

                    if(task.isSuccessful()){

                        user =  FirebaseAuth.getInstance().getCurrentUser();

                        String user_email = user.getEmail();
                        String gendertxt = gender.getSelectedItem().toString();

                        UserProfileChangeRequest profileChangeRequest = new UserProfileChangeRequest.Builder().setDisplayName(name).build(); 

                        user.updateProfile(profileChangeRequest).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(Task<Void> task) {

                                if(task.isSuccessful()){

                                    Log.d("Profile", "User Profile Updated successfully");
                                    FirebaseCrash.log("Profile Updated");

                                }else {

                                    Log.d("Error","error while updating profile");
                                    FirebaseCrash.log("Error while updating profile");

                                }

                            }
                        });


                        mprogress.dismiss();

                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                Intent intent = new Intent(CreateAccountActivity.this, MainActivity.class);
                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                startActivity(intent);
                                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

                                Toast.makeText(CreateAccountActivity.this, "Welcome "+ FirebaseAuth.getInstance().getCurrentUser().getEmail(), Toast.LENGTH_LONG).show();
                            }
                        },500);


                    }else{

                        Snackbar.make(signUpactivity, "Error occurred" , Snackbar.LENGTH_SHORT).show();
                        mprogress.dismiss();

                    }

                }
            });

        }else {

            Snackbar.make(signUpactivity, "Network UnAvailable", Snackbar.LENGTH_SHORT).show();
            mprogress.dismiss();

        }

}

}

当用户输入信息时,它启动方法CreateAccount(),然后当任务成功时,它更新用户配置文件并设置显示名称并启动MainActivity。但它启动主活动,不显示用户名。

主要活动

谁能帮我解决这个问题,当用户退出并再次登录时,它会显示名称,否则在注册后不会显示。

非常感谢您的回答

共有1个答案

冉昊
2023-03-14

您需要将启动MainActivity的代码移动到onComplete()方法内部,以进行概要文件更改。现在,您的代码启动Firebase用户配置文件更改以存储显示名称,但它在用户配置文件更改完成之前显示MainActivity。

您可以更新这段代码,看看我在onComplete()方法末尾添加的内容:

user.updateProfile(profileChangeRequest).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(Task<Void> task) {

                                if(task.isSuccessful()){

                                    Log.d("Profile", "User Profile Updated successfully");
                                    FirebaseCrash.log("Profile Updated");

                                }else {

                                    Log.d("Error","error while updating profile");
                                    FirebaseCrash.log("Error while updating profile");

                                }

                                mprogress.dismiss();
                                Intent intent = new Intent(CreateAccountActivity.this, MainActivity.class);
                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                startActivity(intent);
                                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
                                Toast.makeText(CreateAccountActivity.this, "Welcome "+ FirebaseAuth.getInstance().getCurrentUser().getEmail(), Toast.LENGTH_LONG).show();

                            }
                        });

然后,您可以稍后在函数中删除此代码:

mprogress.dismiss();

                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                Intent intent = new Intent(CreateAccountActivity.this, MainActivity.class);
                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                startActivity(intent);
                                overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

                                Toast.makeText(CreateAccountActivity.this, "Welcome "+ FirebaseAuth.getInstance().getCurrentUser().getEmail(), Toast.LENGTH_LONG).show();
                            }
                        },500);
 类似资料:
  • 问题内容: 根据Firebase网站,我正在使用以下代码创建新用户: 创建新用户时,如何在“身份验证”中添加显示名称和照片网址? 此链接显示从Auth中的身份提供者返回的受支持的用户数据。 问题答案: 您可以使用课程..检查此文档来更新您的个人资料。

  • 我正在创建一个将提供通知的Android应用程序。用户可以使用电话号码或电子邮件帐户选择加入。 我只需要验证用户输入的电子邮件,我不想创建Firebase帐户 Firebase 有一个 但这需要创建一个帐户。 换句话说,我只希望电子邮件验证与电话验证相同,Firebase只会向您发送代码或验证链接。 有没有一种方法可以在不创建帐户的情况下利用Firebase电子邮件验证?

  • 我目前正在使用Firebase_Auth.当我点击登录按钮并且Firebase连接到我的应用程序时,一切似乎都很好。它在终端上显示用户的ID。但是当我去消防基地时。 它无法识别任何已注册的用户。 Ps:问题是当用户注册时,它不会显示给firebase。

  • 问题内容: 我检查了用户是否通过电子邮件验证。但是,无论我发送并确认了多少电子邮件,验证状态仍为。检查时我做错什么了吗? 问题答案: 我如何实现此功能的方法是添加一个 带有时间间隔的,它将检查用户是否已通过验证,然后在完成验证后终止计时器。 检查您当前用户状态的功能:

  • 我检查了用户是否通过电子邮件进行验证。但是,无论我发送并确认了多少封电子邮件,验证状态仍然是。我在检查时是否做错了什么?

  • 我已经做了很多方法来只显示Firebase数据库的用户名。但是我得到了空值。也许你可以帮助我解决这个问题。 这是我拥有的数据库。我的Firebase数据库。 然后这是显示用户名的活动显示用户名的活动 这是我创建的动画,以便您可以更轻松地理解它。动画动图 这是我的密码 第一个活动.Java LoginActivity.Java 注册活动.Java 用户.Java