java - 使用 Firebase 在数据库中保存数据的问题
问题描述
这里的新手问题:我无法在 firebase App 上保存数据。为什么?我正在使用 Base64Custom 对用户的电子邮件进行编码,但没有保存。我之前已经这样做了,但现在它正在工作。
package com.example.eefad.aplicaoteste.activity.Activity; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Base64; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.example.eefad.aplicaoteste.R; import com.example.eefad.aplicaoteste.activity.Config.ConfiguracaoFirebase; import com.example.eefad.aplicaoteste.activity.helper.Base64Custom; import com.example.eefad.aplicaoteste.activity.model.Usuario; 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.auth.FirebaseAuthInvalidCredentialsException; import com.google.firebase.auth.FirebaseAuthUserCollisionException; import com.google.firebase.auth.FirebaseAuthWeakPasswordException; ; public class MainActivity extends AppCompatActivity { private EditText campoNome, campoEmail, campoSenha; private Button botaoCadastrar; private Usuario usuario; private FirebaseAuth autenticacao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); campoNome = findViewById(R.id.editNome); campoEmail = findViewById(R.id.editEmail); campoSenha = findViewById(R.id.editSenha); botaoCadastrar = findViewById(R.id.buttonCadastrar); botaoCadastrar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String textoNome = campoNome.getText().toString(); String textoEmail = campoEmail.getText().toString(); String textoSenha = campoSenha.getText().toString(); //Validação do preenchimento dos campos. if(!textoNome.isEmpty() ) { if(!textoEmail.isEmpty()){ if(!textoSenha.isEmpty()){ usuario = new Usuario(); usuario.setNome(textoNome); usuario.setEmail(textoEmail); usuario.setSenha(textoSenha); cadastrarUsuario(); } } } } }); } public void cadastrarUsuario(){ autenticacao = ConfiguracaoFirebase.getFirebaseAutenticacao(); autenticacao.createUserWithEmailAndPassword(usuario.getEmail(), usuario.getSenha()) .addOnCompleteListener(this, new OnCompleteListener <AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if(task.isSuccessful() ){ // String idUsuario = Base64Custom.codificarBase64(usuario.getEmail()); String idUsuario = usuario.getEmail(); usuario.setIdUsuario(idUsuario); usuario.salvar(); verificaUsuarioLogado(); Toast.makeText(MainActivity.this, "Usuário Salvo com Sucesso", Toast.LENGTH_SHORT).show(); finish(); }else { String excecao = ""; try { throw task.getException(); }catch ( FirebaseAuthWeakPasswordException e){ excecao = "Digite uma senha mais forte!"; }catch ( FirebaseAuthInvalidCredentialsException e){ excecao= "Por favor, digite um e-mail válido"; }catch ( FirebaseAuthUserCollisionException e){ excecao = "Este conta já foi cadastrada"; }catch (Exception e){ excecao = "Erro ao cadastrar usuário: " + e.getMessage(); e.printStackTrace(); } Toast.makeText(MainActivity.this, excecao, Toast.LENGTH_SHORT).show(); } } }); } public void verificaUsuarioLogado(){ autenticacao = ConfiguracaoFirebase.getFirebaseAutenticacao(); if(autenticacao.getCurrentUser() !=null ) { startActivity(new Intent(this, TelaCadastro.class)); } } }
我正在使用 Getters 和 setter 来返回数据,并且我创建了一个方法调用 salvar 来保存在数据库上。
package com.example.eefad.aplicaoteste.activity.model;
import com.example.eefad.aplicaoteste.activity.Config.ConfiguracaoFirebase;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.Exclude;
public class Usuario {
private String idUsuario;
private String nome;
private String email;
private String senha;
public Usuario() {
}
public void salvar(){
DatabaseReference firebase = ConfiguracaoFirebase.getFirebaseDatabase();
firebase.child("usuarios")
.child(this.idUsuario)
.setValue(this);
}
@Exclude
public String getIdUsuario() {
return idUsuario;
}
public void setIdUsuario(String idUsuario) {
this.idUsuario = idUsuario;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Exclude
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
}
我不知道我做错了什么。我一直在尝试保存电子邮件,但使用该结构似乎是不可能的。
解决方案
推荐阅读
- powershell - 如何在管道到另一个 cmdlet 后将“详细信息”列添加到 OGV
- javascript - 如何使用 JS 防止本地存储覆盖值
- c# - 如何为可以过滤三个连接参数的表创建 WHERE 子句?
- blaze-persistence - Blaze Persistence 在 where 表达式中跳过空参数
- quartz-scheduler - 集群模式下的 Quartz 调度器:高频和低频触发器会在随机节点上触发吗?
- arangodb - 使用 foxx 微服务与 pyarango
- imagemagick - ImageMagick 和 alpha 通道 CMD
- java - 如何将 google 和 Facebook 登录集成保存到 Firebase 实时数据库 Android Studio Java
- python - 使用 pandas 转换日期字符串 [Quarter to Year] 无法识别的值类型:
- python - 使用函数遍历 Dataframe 中的行并计算非 NA 值