java - 使用 android studio 写入实时数据库
问题描述
我正在讨论这个应用程序,我想注册用户并将他们保存在 firebase 中。这是我的代码:
package com.example.jimax_project;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
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.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.HashMap;
import java.util.Map;
public class AuthActivity extends AppCompatActivity {
private EditText mEditTextName;
private EditText mEditTextEmail;
private EditText mEditTextPassword;
//TAGS DE LOS DATOS A REGISTRAR;
private String name= "";
private String email= "";
private String password= "";
FirebaseAuth mAuth;
DatabaseReference mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auth);
Button mButtonRegister;
mAuth = FirebaseAuth.getInstance();
mDatabase = FirebaseDatabase.getInstance().getReference();
mEditTextName = (EditText)findViewById(R.id.editTextName);
mEditTextEmail = (EditText)findViewById(R.id.EditTextEmail);
mEditTextPassword = (EditText)findViewById(R.id.EditTextPassword);
mButtonRegister = (Button)findViewById(R.id.btnRegister);
mButtonRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
name = mEditTextName.getText().toString();
email = mEditTextEmail.getText().toString();
password = mEditTextPassword.getText().toString();
if (!name.isEmpty() && !email.isEmpty() && !password.isEmpty()){
if(password.length()>=6) {
registerUser();
}
else {
Toast.makeText(AuthActivity.this,"La contraseña debe tener almenos 6 caracteres",Toast.LENGTH_SHORT).show();
}
}
else{
Toast.makeText(AuthActivity.this,"Debe completar los campos",Toast.LENGTH_SHORT).show();
}
}
});
}
private void registerUser(){
mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
Map<String, Object> map = new HashMap<>();
map.put("name",name);
map.put("email",email);
map.put("password",password);
String id = mAuth.getCurrentUser().getUid();
mDatabase.child("Users").child(id).setValue(map).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task2) {
if (task2.isSuccessful()){
startActivity(new Intent(AuthActivity.this,ProfileActivity.class));
finish();
}
else {
Toast.makeText(AuthActivity.this,"No se puedieron crear los datos correctamente",Toast.LENGTH_SHORT).show();
}
}
});
}
else{
Toast.makeText(AuthActivity.this,"No se pudo registrar el usuario",Toast.LENGTH_SHORT).show();
}
}
});
}
}
问题是,当您按下注册按钮时,身份验证在 firebase 中完成,但数据未在应用程序应创建的数据库(用户表)中注册
当我按下“注册”按钮时,会出现在日志中:
2021-09-07 15:03:56.998 7135-7299/com.example.jimax_project W/System: Ignoring header X-Firebase-Locale because its value was null.
2021-09-07 15:03:58.344 7135-7299/com.example.jimax_project W/System: Ignoring header X-Firebase-Locale because its value was null.
2021-09-07 15:03:58.649 7135-7299/com.example.jimax_project D/FirebaseAuth: Notifying id token listeners about user ( B3G6IL3ThuXk0OrO32uA9QKcgMz2 ).
2021-09-07 15:03:58.650 7135-7299/com.example.jimax_project D/FirebaseAuth: Notifying auth state listeners about user ( B3G6IL3ThuXk0OrO32uA9QKcgMz2 ).
我一直在寻找,并且我在firebase中将安全设置为true,我尝试在清单中添加android行:usesCleartextTraffic =“true”,并且我还声明了互联网权限,我不知道是什么否则我可以测试。
我将不胜感激任何帮助,谢谢
解决方案
您的“姓名”、“电子邮件”和“密码”不是对象,它们是字符串。
您必须在地图中使用字符串,而不是对象。
见下文:
Map<String, Object> map = new HashMap<>();
- 错误
Map<String, String> map = new HashMap<>();
- 正确
用“字符串”替换你的“对象”,一切都应该正常。
谢谢
推荐阅读
- ruby-on-rails - Rails ActsAsTaggableOn,按相似标签的数量对“tagged_with”结果进行排名
- javascript - 如何模拟和测试 Axios 拒绝的承诺?
- html - Flexbox:如何防止非重叠按钮调整大小
- arduino - 如何使用 Arduino 从 NodeMcu 中的 URL 获取实时数据?
- firebase - 是否可以在小部件中放置 Firebase 查询
- bazel - 使用 Bazel 运行“gans/experiments/emnist:run_experiments”时出错:仅在工作空间内支持“运行”命令
- php - 如何解析这些 XML 数据并获得准确的结果?
- mysql - 无法在 SQL 中将日期放在列中,将指标放在另一个列中
- java - Java 创建具有多个 GUI 框架的程序
- r - 为整列返回 NA 的聚合函数