请帮助我解决以下错误:
com.google.firebase.database.DatabaseException: Invalid Firebase Database path: iman@gmail.com. Firebase Database paths must not contain '.', '#', '$', '[', or ']'
at com.google.firebase.database.core.utilities.Validation.validatePathString
at com.example.quizapp.SignInActivity$3.onDataChange(SignInActivity.java:85)
我的代码:
public class SignInActivity extends AppCompatActivity {
private EditText memail;
private EditText mpassword;
private Button mlogin;
private Button mregister;
private ProgressBar mpgbar;
private FirebaseAuth mAuth;
FirebaseDatabase database;
DatabaseReference users;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_in);
database = FirebaseDatabase.getInstance();
users = database.getReference("User");
mAuth = FirebaseAuth.getInstance();
memail = findViewById(R.id.emailtv);
mpassword = findViewById(R.id.passwordtv);
mlogin = findViewById(R.id.loginBtn);
mregister = findViewById(R.id.regBtn);
mpgbar = findViewById(R.id.progressBar);
mregister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SignInActivity.this, RegisterActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
return;
}
});
mlogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginUser(memail.getText().toString(),mpassword.getText().toString());
}
});
}
private void LoginUser(final String email, final String pwd) {
if(isEmpty()) return;
inProgress(true);
users.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.child(email).exists())
{
if(!email.isEmpty())
{
User login = dataSnapshot.child(email).getValue(User.class);
if(login.getType().equalsIgnoreCase("Admin"))
{
mAuth.signInWithEmailAndPassword(email,pwd)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Toast.makeText(SignInActivity.this, "User signed in", Toast.LENGTH_LONG).show();
Intent intent = new Intent(SignInActivity.this, AdminPage.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish(); return;
}
});
}
else if(login.getType().equalsIgnoreCase("User"))
{
if(isEmpty()) return;
inProgress(true);
mAuth.signInWithEmailAndPassword(memail.getText().toString(),mpassword.getText().toString())
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Toast.makeText(SignInActivity.this, "User signed in", Toast.LENGTH_LONG).show();
Intent intent = new Intent(SignInActivity.this, Home.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish(); return;
}
});
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void inProgress(boolean x) {
if (x) {
mpgbar.setVisibility(View.VISIBLE);
mlogin.setEnabled(false);
mregister.setEnabled(false);
} else {
mpgbar.setVisibility(View.GONE);
mlogin.setEnabled(true);
mregister.setEnabled(true);
}
}
private boolean isEmpty() {
if (TextUtils.isEmpty(memail.getText().toString())) {
memail.setError("REQUIRED");
return true;
}
if (TextUtils.isEmpty(mpassword.getText().toString())) {
mpassword.setError("REQUIRED");
return true;
}
return false;
}
}
Java第85行是if(dataSnapshot.child(email).exists())
答案 0 :(得分:1)
您不能将某些东西用作带有特殊符号(例如'。'(点)的中间节点)
来自docs
如果您创建自己的密钥,则它们必须是UTF-8编码的,最多可以为768个字节,并且不能包含。,$,#,[,],/或ASCII控制字符0-31或127您也不能在值本身中使用ASCII控制字符。
您可以简单地使用用户的唯一ID作为密钥,或者如果您真的想使用电子邮件作为密钥,则替换所有的'。下划线“ _”或类似的内容;