如何验证电子邮件是否在Firebase上注册?

时间:2018-08-05 15:21:04

标签: java android firebase firebase-realtime-database

这是我的BotaoConfig活动,此处的想法是从EditText捕获文本,验证Firebase服务器中此电子邮件是否以Base64格式存在,如果存在,则应用程序使用户前进转到另一个活动,否则,将显示Toast消息。

这种有效验证方法,是在按下按钮时发生的,我在按钮上激活了onClick属性。

唯一不起作用的是如果if(dataSnapshot.getValue()!= null)表示其他功能正在工作,而另一种如果没有编写任何内容,则像我说的那样困难如果用户存在。

package br.com.projeto.fetin.projeto;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;

import br.com.projeto.fetin.projeto.config.ConfiguracaoFirebase;
import br.com.projeto.fetin.projeto.helper.Base64Custom;
import br.com.projeto.fetin.projeto.model.Usuario;

public class BotaoConfig extends AppCompatActivity {

private EditText emailDigitado;
private String identificadorContato;
private DatabaseReference firebase;
private Usuario usuario;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_botao_config);

    emailDigitado = (EditText) findViewById(R.id.edit_cadastrar_usuario);
}

public void abrirChat(View view)
{
    usuario = new Usuario();
    usuario.setEmail( emailDigitado.getText().toString() );
    validarContato();
}

private void validarContato()
{
    //String emailContato = emailDigitado.getText().toString();
    firebase = ConfiguracaoFirebase.getFirebase().child("usuarios").child(usuario.getEmail());

    if( usuario.getEmail().isEmpty() ){
        Toast.makeText(BotaoConfig.this, "Preencha o e-mail", Toast.LENGTH_LONG).show();
    }else{

        //Verificar se o usuário já está cadastrado no nosso App
        identificadorContato = Base64Custom.codificarBase64(usuario.getEmail());

        //Recuperar instância Firebase
        firebase = ConfiguracaoFirebase.getFirebase().child("usuarios").child(identificadorContato);

        firebase.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.getValue() != null) {

                    Intent intent = new Intent(BotaoConfig.this, MainActivity.class);
                    startActivity(intent);

                } else {
                    Toast.makeText(BotaoConfig.this, "Usuário não possui cadastro.", Toast.LENGTH_LONG).show();
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }
}

}

这是我在上一个课程中使用的usuário类

package br.com.projeto.fetin.projeto.model;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.Exclude;

import br.com.projeto.fetin.projeto.config.ConfiguracaoFirebase;

public class Usuario {

何时

private String id;
private String nome;
private String email;
private String senha;
private int flag;
//private String senha1;

public Usuario(){

}

public void salvar(){
    DatabaseReference referenciaFirebase = ConfiguracaoFirebase.getFirebase();
    referenciaFirebase.child("usuarios").child(getId()).setValue(this);
}

public int getFlag() {
    return flag;
}

public void setFlag(int flag) {
    this.flag = flag;
}

@Exclude //para não salvar id ou senha no banco de dados usamos essa anotação
public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

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;
}

public String getSenha() {
    return senha;
}

public void setSenha(String senha) {
    this.senha = senha;
}
/*@Exclude
public String getSenha1() {
    return senha1;
}

public void setSenha1(String senha) {
    this.senha1 = senha;
}*/

}

当我输入在Firebase上订阅的电子邮件时,应用程序崩溃了,这是日志记录

21/br.com.projeto.fetin.projeto E/AndroidRuntime: FATAL EXCEPTION: main
  Process: br.com.projeto.fetin.projeto, PID: 15621
  java.lang.IllegalStateException: Could not execute method for android:onClick
      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
      at android.view.View.performClick(View.java:5201)
      at android.view.View$PerformClick.run(View.java:21163)
      at android.os.Handler.handleCallback(Handler.java:746)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:148)
      at android.app.ActivityThread.main(ActivityThread.java:5443)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
   Caused by: java.lang.reflect.InvocationTargetException
      at java.lang.reflect.Method.invoke(Native Method)
      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
      at android.view.View.performClick(View.java:5201) 
      at android.view.View$PerformClick.run(View.java:21163) 
      at android.os.Handler.handleCallback(Handler.java:746) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:148) 
      at android.app.ActivityThread.main(ActivityThread.java:5443) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
   Caused by: com.google.firebase.database.DatabaseException: Invalid Firebase Database path: n.ribeiro.cunha.azevedo100@gmail.com. Firebase Database paths must not contain '.', '#', '$', '[', or ']'
      at com.google.android.gms.internal.zzamx.zztj(Unknown Source)
      at com.google.firebase.database.DatabaseReference.child(Unknown Source)
      at br.com.projeto.fetin.projeto.BotaoConfig.validarContato(BotaoConfig.java:47)
      at br.com.projeto.fetin.projeto.BotaoConfig.abrirChat(BotaoConfig.java:41)
      at java.lang.reflect.Method.invoke(Native Method) 
      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
      at android.view.View.performClick(View.java:5201) 
      at android.view.View$PerformClick.run(View.java:21163) 
      at android.os.Handler.handleCallback(Handler.java:746) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:148) 
      at android.app.ActivityThread.main(ActivityThread.java:5443) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

最后是我的Firebase数据库结构

enter image description here

1 个答案:

答案 0 :(得分:1)

错误消息告诉您出了什么问题:

  

原因:com.google.firebase.database.DatabaseException:无效的Firebase数据库路径:n.ribeiro.cunha.azevedo100@gmail.com。 Firebase数据库路径中不得包含“。”,“#”,“ $”,“ [”或“]”

您不能在实时数据库中将电子邮件地址用作密钥,因为它们包含无效字符。

相关问题