我最近为后端工作采用了Firebase。使用Firebase我想将所有用户数据(如用户名,电话号码等)存储到同一RegisterActivity
的Firebase中,而不仅仅是电子邮件&密码。我怎样才能做到这一点?
我的RegisterActivity
只会在安装时出现。当用户注册我的应用程序时,我正在销毁该活动。因此,RegisterActivity
没有进一步的实例。
RegisterActivity - onCreate()
:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Firebase.setAndroidContext(this);
setContentView(R.layout.activity_register);
initialization();
underlineText(); //Underlining Text in App
userObj = new User();
userObj.setName(NAME);
userObj.setEMAIL(EMAIL);
userObj.setPHONE(PHN);
animShake = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.shake); //Animation
vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); //Vibration
reg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
submitForm(); //Registration Click Listener
}
});
skip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
skipRegistrationSection(); //Skip Click Listener
}
});
runAtInstallation();
}
submitform()
:
private void submitForm() {
if (!checkName()) {
name.setAnimation(animShake);
name.startAnimation(animShake);
vib.vibrate(60);
return;
}
if (!checkEmail()) {
email.setAnimation(animShake);
email.startAnimation(animShake);
vib.vibrate(60);
return;
}
if (!checkPhone()) {
phone.setAnimation(animShake);
phone.startAnimation(animShake);
vib.vibrate(60);
return;
}
if (!checkPassword()) {
password.setAnimation(animShake);
password.startAnimation(animShake);
vib.vibrate(60);
return;
}
if (!checkConfirmPassword()) {
confirmPassword.setAnimation(animShake);
confirmPassword.startAnimation(animShake);
vib.vibrate(60);
return;
}
nameLayout.setErrorEnabled(false);
emailLayout.setErrorEnabled(false);
phoneLayout.setErrorEnabled(false);
passwordLayout.setErrorEnabled(false);
confirmPasswordLayout.setErrorEnabled(false);
NAME = name.getText().toString().trim();
EMAIL = email.getText().toString().trim();
PHN = phone.getText().toString().trim();
PASSWORD = password.getText().toString();
progressBar.setVisibility(View.VISIBLE);
authUser(); //authenticating User via Email & Password
}
authUser()
:
private void authUser() {
mFirebaseAuth.createUserWithEmailAndPassword(EMAIL, PASSWORD).addOnCompleteListener(RegisterActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
builder.setMessage(task.getException().getMessage())
.setTitle("Error")
.setPositiveButton(android.R.string.ok, null);
AlertDialog dialog = builder.create();
dialog.show();
progressBar.setVisibility(View.GONE);
} else {
progressBar.setVisibility(View.GONE);
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
}
});
}
runAtInstallation
:
private void runAtInstallation() {
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE);
if (pref.getBoolean("activity_executed", false)) {
Intent act = new Intent(getApplicationContext(), MainActivity.class);
act.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
act.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(act);
finish();
} else {
SharedPreferences.Editor ed = pref.edit();
ed.putBoolean("activity_executed", true);
ed.commit();
}
}
我想保存名称,电子邮件和&amp;注册期间在firebase数据库中打电话,并在此之后销毁活动。
答案 0 :(得分:1)
我现在正在same problem工作。问题是,登录(身份验证)和注册(注册)是两回事。
我所做的是有两个独立的活动,即signIN ...和signUP(注册)。
用户注册后(电子邮件和密码),他们将拥有Firebase已知的唯一用户ID。
接下来,他们进入注册活动,所以当你&#34;上传&#34;来自此活动中editTexts的所有数据,您可以将它们上传到数据库中与userID相匹配的节点(key ... index),以便数据库中的数据如下所示:
\ mydatabase \ users \ [uniqueID] \
如果您将两个活动(身份验证和注册)合并为一个...包含多个字段,&#34;电子邮件,密码,姓名,电话号码等等#34;在一个活动中,您仍然需要在下次使用过期会话运行应用时,单独使用signIN活动。我认为做两个单独的活动要简单得多。
答案 1 :(得分:0)
我有一个活动,我只是尝试立即注册,无论用户是否存在,然后如果错误是由于现有的电子邮件已经存在,我签署用户而不是注册它们。
mAuth = FirebaseAuth.getInstance();
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
if(task.getException() instanceof FirebaseAuthUserCollisionException) {
// login user
}
else {
// handle error
}
}
else {
// register user
}
}
答案 2 :(得分:0)
您可以添加用户个人资料信息和其他详细信息,例如
更新个人资料
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setDisplayName("Jane Q. User")
.setPhotoUri(Uri.parse("https://example.com/jane-q-user/profile.jpg"))
.build();
user.updateProfile(profileUpdates)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User profile updated.");
}
}
});
有关管理用户详细信息的详细信息,请参阅此链接Firebase manage user