我正在使用Firebase身份验证(电子邮件和密码)和Firebase数据库。 成功注册后,我试图写入数据库。 我正在使用Firebase助手提供的简单的数据库编写查询:
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");
如果我仅通过活动的onCreate
方法编写它,它就可以工作,但是当我在Auth成功侦听器中编写它时,该帐户会注册,但是消息不会写入数据库: / p>
// [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
}
答案 0 :(得分:0)
有一些步骤可以在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();
}
}
如果您还有其他疑问。请让我知道
答案 1 :(得分:0)
您的Firebase规则似乎在未经身份验证时允许写入
第1步:转到https://console.firebase.google.com/project/[projectname]/database/[projectname]/rules
第2步:通过粘贴以下代码来允许访问数据库
{
"rules": {
".read": true,
".write": true
}
}
第3步:发布
该代码使您的数据库公开,不建议将其保留,因此在完成测试和开发后,应该保护它。