【问题标题】:Firebase user display name won't show on activity after creating new Firebase email password user account?创建新的 Firebase 电子邮件密码用户帐户后,Firebase 用户显示名称不会显示在活动中?
【发布时间】:2018-03-28 14:42:36
【问题描述】:

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

CreateAccountActivity

公共类 CreateAccountActivity 扩展 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。但它启动 MainActivty 它不显示用户名。

MainActivity

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

高度赞赏任何答案

【问题讨论】:

    标签: java android firebase firebase-authentication


    【解决方案1】:

    您需要将启动 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);
    

    【讨论】:

    • 我更新了我的答案,包括将哪些代码移动到哪里的详细信息。
    • 当我关闭它并再次打开它时它仍然不起作用,但是当我退出用户并重新签名时它就可以工作
    猜你喜欢
    • 2016-11-18
    • 2019-07-26
    • 1970-01-01
    • 2019-06-18
    • 2020-06-22
    • 2019-07-10
    • 2016-11-18
    • 2018-03-12
    • 1970-01-01
    相关资源
    最近更新 更多