这是我创建的registerUser函数。如果你能看到,我已经完成了将值存储到数据库中所需的一切使用setValue((方法获取firebase数据库的引用和实例以及设置值,并传递构造函数类user的用户对象。我不知道哪里出了问题。请帮忙,这将是非常可观的。这是我注册用户并存储到Firebase数据库的Java代码
private void registerUser()
{
String Email=nEmail.getText().toString().trim();
String password=npassword.getText().toString().trim();
String Username=nFullName.getText().toString().trim();
String Phone=nphone.getText().toString().trim();
if(Username.isEmpty()) {
nFullName.setError("Name is required");
nFullName.requestFocus();
return;
}
if(Email.isEmpty()) {
nEmail.setError("Email is required");
nEmail.requestFocus();
return;
}
if(!Patterns.EMAIL_ADDRESS.matcher(Email).matches()){
nEmail.setError("please provide valid email");
nEmail.requestFocus();
return;
}
if(password.isEmpty()) {
npassword.setError("password is required");
npassword.requestFocus();
return;
}
if(password.length() < 6)
{
npassword.setError("password must be 6 chracters long");
npassword.requestFocus();
return;
}
if(Phone.isEmpty()) {
nphone.setError("Phone is required");
nphone.requestFocus();
return;
}
progressBar.setVisibility(View.VISIBLE);
mAuth.createUserWithEmailAndPassword(Email,password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{
String Email=nEmail.getText().toString().trim();
String Username=nFullName.getText().toString().trim();
String Phone=nphone.getText().toString().trim();
Users user=new Users(Username,Phone,Email);
FirebaseDatabase.getInstance().getReference("Users")
.child(Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid()).setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(activity_register.this,"User Has been Successfully registered",Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
else
{
Toast.makeText(activity_register.this,"Failed..... :(",Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
});
}
else
{
Toast.makeText(activity_register.this,"Failed..... :(",Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
});
}
}
如果工作需要,还建议我使用任何依赖项。
我认为问题的解决方案是以另一种方式使用FirebaseDatabase。Problem
:您正在调用;getReference"方法并用String值初始化它:";用户";。
代替:
FirebaseDatabase.getInstance().getReference("Users")
.child(Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid()).setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
试试这个:
FirebaseDatabase var1 = FirebaseDatabase.getInstance();
DatabaseReference userRef = var1.getReference().child("Users");
FirebaseAuth auth = FirebaseAuth.getInstance();
userRef = userRef.child(auth.getCurrentUser()).getUid());
userRef.setValue("your string").addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{System.out.print("Now it works!")
}
}
});
setValue方法需要一个字符串值(通常(。
请不要在setValue方法中放入类似Users类的类。
如果你想为一个用户保存多个数据字符串,你可以在用户根后面添加另一个.child("DataStringName"(。
用户名和普通名称示例:
FirebaseDatabase var1 = FirebaseDatabase.getInstance();
DatabaseReference userRef = var1.getReference().child("Users");
FirebaseAuth auth = FirebaseAuth.getInstance();
userRef = userRef.child(auth.getCurrentUser()).getUid());
DatabaseReference usernameRef = userRef.child("username");
DatabaseReference nameRef = userRef.child("name");
usernameRef.setValue("Username").addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{System.out.print("Username is uploaded!")
}
}
});
nameRef.setValue("Name").addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{System.out.print("Name is uploaded!")
}
}
});
我希望这个答案对你有帮助!
谨致问候!
因此,创建帐户的代码是正确的。
有几件事你应该特别注意:
-
是否已在Firebase身份验证中启用电子邮件/密码功能(Firebase(
-
你按照安卓系统的说明操作了吗?
请向我显示包含错误响应或firebase的任何响应的日志。我相信会有回应的!