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

时间:2017-10-17 01:20:51

标签: java android firebase firebase-authentication

我使用下面显示的简单电子邮件密码进行注册活动以在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

任何人都可以帮我修复此问题,当用户退出并重新登录时,它会显示该名称,否则在注册后无法显示。

非常感谢任何答案

1 个答案:

答案 0 :(得分:0)

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