我使用的是Firebase auth(电子邮件和密码(和Firebase数据库。我正在尝试在成功注册后写入数据库。我使用的是Firebase助手提供的简单的数据库编写查询:
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");
如果我只是在活动的onCreate
方法下编写它,它确实有效,但当我在Auth成功侦听器中编写它时,帐户确实注册了,但消息没有写入数据库:
// [START sign_in_with_email]
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
//rest of code
}
在android中使用firebase数据库有一些步骤。
在Firebase控制台中启用电子邮件id和密码身份验证
注册来自代码的电子邮件和密码
在的帮助下
firebaseAuth.createUserWithEmailAndPassword(txt_email, txt_password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
assert firebaseUser != null;
String UserId = firebaseUser.getUid();
}
使用Hashmap设置Value。
并使用此代码登录
private void login(String txt_email, String txt_password) {
firebaseAuth.signInWithEmailAndPassword(txt_email,txt_password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Intent intent = new Intent(SignIn.this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
hideProgressDialog();
startActivity(intent);
finish();
}
else{
String error = Objects.requireNonNull(task.getException()).getMessage();
hideProgressDialog();
Toast.makeText(SignIn.this, error, Toast.LENGTH_SHORT).show();
// Toast.makeText(SignIn.this, "Authentication Failed", Toast.LENGTH_SHORT).show();
}
}
});
}
public void showProgressDialog() {
if (mProgressDialog == null) {
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage(getString(R.string.loading));
mProgressDialog.setIndeterminate(true);
mProgressDialog.setCancelable(false);
}
mProgressDialog.show();
}
public void hideProgressDialog() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
}
如果你有进一步的怀疑。请告诉我
当您未通过身份验证时,您的firebase规则似乎允许写入
步骤1:转到https://console.firebase.google.com/project/[项目名称]/数据库/[项目名称]/规则
步骤2:允许通过粘贴以下代码访问数据库
{
"rules": {
".read": true,
".write": true
}
}
步骤3:发布
该代码使您的数据库公开,不建议将其保留,并且您应该在完成测试和开发后对其进行保护。