Java Firebase通过电子邮件和密码注册-如何向用户添加其他详细信息
我知道这个问题已经讨论过很多次了,不幸的是我是个书呆子,没有找到足够有用的答案。 基本上,我的应用程序使用电子邮件和密码注册方法将用户注册到Firebase。我还需要另外两个用户字段,name和lastname。我知道这些必须保存在 实时数据库。 这是我的代码:Java Firebase通过电子邮件和密码注册-如何向用户添加其他详细信息,java,android,firebase,firebase-authentication,Java,Android,Firebase,Firebase Authentication,我知道这个问题已经讨论过很多次了,不幸的是我是个书呆子,没有找到足够有用的答案。 基本上,我的应用程序使用电子邮件和密码注册方法将用户注册到Firebase。我还需要另外两个用户字段,name和lastname。我知道这些必须保存在 实时数据库。 这是我的代码: import androidx.appcompat.app.AppCompatActivity; import android.app.ProgressDialog; import android.content.Intent; im
import androidx.appcompat.app.AppCompatActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.FirebaseDatabase;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
EditText editTextEmail;
EditText editTextPassword;
EditText editTextRePassword;
EditText editTextName;
EditText editTextLastName;
Button buttonSignup;
TextView textViewSignin;
ProgressDialog progressDialog;
FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initializing firebase auth object
firebaseAuth = FirebaseAuth.getInstance();
//if getCurrentUser does not returns null
if(firebaseAuth.getCurrentUser() != null){
//that means user is already logged in
//so close this activity
finish();
//and open profile activity
startActivity(new Intent(getApplicationContext(), ProfileActivity.class));
}
//initializing views
editTextEmail = (EditText) findViewById(R.id.editTextEmail);
editTextPassword = (EditText) findViewById(R.id.editTextPassword);
editTextRePassword = (EditText) findViewById(R.id.editTextRePassword);
editTextName = (EditText) findViewById(R.id.editTextName);
editTextLastName = (EditText) findViewById(R.id.editTextLastName);
textViewSignin = (TextView) findViewById(R.id.textViewSignin);
buttonSignup = (Button) findViewById(R.id.buttonSignup);
progressDialog = new ProgressDialog(this);
//attaching listener to button
buttonSignup.setOnClickListener(this);
textViewSignin.setOnClickListener(this);
}
private boolean isValidEmail(String email){
boolean isValidEmail = false;
String regExpn = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
CharSequence inputStr = email;
Pattern pattern = Pattern.compile(regExpn, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (email.matches(regExpn))
{
isValidEmail = true;
}
return isValidEmail;
}
private void registerUser(){
//getting email and password from edit texts
String email = editTextEmail.getText().toString().trim();
String password = editTextPassword.getText().toString().trim();
String repass = editTextRePassword.getText().toString().trim();
String name = editTextName.getText().toString().trim();
String lastname = editTextLastName.getText().toString().trim();
if(TextUtils.isEmpty(password)){
Toast.makeText(this,"Please enter the password",Toast.LENGTH_LONG).show();
return;
}
else if(TextUtils.isEmpty(email)){
Toast.makeText(this, "Please enter email", Toast.LENGTH_LONG).show() ;
return;
}
else if (TextUtils.isEmpty(repass)){
Toast.makeText(this,"Please repeat the password",Toast.LENGTH_LONG).show();
return;
}
else if (!password.equals(repass)) {
Toast.makeText(this,"You must input the same password as in the previous field",Toast.LENGTH_LONG).show();
return;
}
else if(!isValidEmail(email.toString().trim()))
{
Toast.makeText(this,"Please use a valid email address",Toast.LENGTH_LONG).show();
return;
}
else if (password.length()<6) {
Toast.makeText(this,"Your password must be at least 6 characters long",Toast.LENGTH_LONG).show();
return;
}
else if(TextUtils.isEmpty(name)){
Toast.makeText(MainActivity.this, "Please enter your name", Toast.LENGTH_LONG).show() ;
return;
}
else if (TextUtils.isEmpty(lastname)){
Toast.makeText(this,"Please input your last name",Toast.LENGTH_LONG).show();
return;
}
progressDialog.setMessage("Registering, please wait...");
progressDialog.show();
//creating a new user
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
//checking if success
if(task.isSuccessful()){
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
startActivity(new Intent(getApplicationContext(), ProfileActivity.class));
}else{
//display some message here
Toast.makeText(MainActivity.this,"Registration Error",Toast.LENGTH_LONG).show();
}
progressDialog.dismiss();
}
});
}
@Override
public void onClick(View view) {
if(view == buttonSignup){
registerUser();
}
if(view == textViewSignin){
//open login activity when user taps on the already registered textview
startActivity(new Intent(this, LoginActivity.class));
}
}
}
感谢您的帮助。请参阅以下答案:
您必须在数据库中创建一个users子项,该子项包含所有额外的用户信息。我这样做的方式是在用户成功注册后,您可以将其信息存储在users/:userId下
这段代码中到底有什么不符合您的预期?基本上,我缺少在Firebase数据库中创建记录的代码部分。我的代码只允许注册用户和登录。你说缺少创建记录的代码部分是什么意思?我不知道如何添加通过电子邮件注册的用户的名称并传入Firebase实时数据库。updateUI方法应该是什么样子?感谢你的情况,开始一项新的活动很简单
@Override
public void onComplete(@NonNull Task < AuthResult > task){
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "createUserWithEmail:success");
User user = new User(name, email, phoneNumber);
FirebaseDatabase.getInstance().getReference().child("users").child(mAuth.getCurrentUser()).setValue(user);
updateUI(user);
} else {
}
}
});