2017-05-05 53 views
2

我正在使用Firebase。我想检查我的应用程序的重复数据。目前我让用户输入姓名和电子邮件。但是,如果用户第二次输入相同的名称和电子邮件,它也会被添加到数据库中。 如何解决这个 这里是我的代码:如何检查Firebase中的重复数据

package com.example.zaid_pc.mpd2; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
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.FirebaseDatabase; 
import com.google.firebase.database.ValueEventListener; 

public class tournament extends AppCompatActivity { 

private EditText etTournament; 
private EditText emailTournament; 
private DatabaseReference mDatabaseRefernce; 
Button btnTournament; 



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

etTournament = (EditText)findViewById(R.id.etTournament); 
emailTournament = (EditText)findViewById(R.id.emailTournament); 
btnTournament = (Button)findViewById(R.id.btnTournament); 

mDatabaseRefernce = FirebaseDatabase.getInstance().getReference().child("People Registered"); 

btnTournament.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 



    final String name = etTournament.getText().toString().trim(); 
    final String email = emailTournament.getText().toString().trim(); 

    //mDatabaseRefernce.child("Name").setValue(name); 
    //mDatabaseRefernce.child("Email").setValue(email); 



final DatabaseReference peopleRegisered = mDatabaseRefernce.push(); 
peopleRegisered.child("Name").setValue(name); 
peopleRegisered.child("Email").setValue(email); 



Toast.makeText(tournament.this, "You will be notified via email", Toast.LENGTH_LONG).show(); 

finish(); 




     } 
    }); 


} 

}

+0

的[火力地堡的android:使用户名唯一]可能的复制(http://stackoverflow.com/questions/35243492/firebase-android-make-username-unique) – faruk

+0

发布火力地堡数据库结构 – Lingeshwaran

回答

0

之前将数据推送到数据库首先与数据库或检查是否存在数据不

检查用户名是从现有的或不以下代码

DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); 
Query query = reference.child("issue").orderByChild("id").equalTo(0); 
query.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.exists()) { 
      // dataSnapshot is the "issue" node with all children with id 0 
      for (DataSnapshot issue : dataSnapshot.getChildren()) { 
       // do something with the individual "issues" 
      } 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

修改根据您的需要

对裁判 Firebase querying data

0

为了解决这个问题,我recomand您使用每个用户的唯一标识符此代码。该标识符可以是由push()方法,uidemail address生成的唯一ID。我建议你最后的选择。由于火力地堡不会在关键的接受像.一个符号,你需要econde的电子邮件地址是这样的:

[email protected] - >名@电子邮件,COM

要实现这一点,这里有2个方法,将帮助你encodedecode的电子邮件地址。

private String encodeUserEmail(String userEmail) { 
    return userEmail.replace(".", ","); 
} 

private String decodeUserEmail(String userEmail) { 
    return userEmail.replace(",", "."); 
} 

假设你的数据库结构看起来像这样:

root 
| 
--- users 
     | 
     --- [email protected],com 
       | 
       --- uid: 4362454274745 
       | 
       --- name: John 

用户是否存在使用下面的代码,你可以验证:

DatabaseReference userEmailRef = FirebaseDatabase.getInstance().getReference().child("users").child(userEmail); 
    ValueEventListener valueEventListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.exists()) { 
       Log.d("TAG", "Users exists!"); 
      } else { 
       //Create user 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) {} 
    }; 
    userEmailRef.addListenerForSingleValueEvent(valueEventListener); 

在这userEmail是编码的电子邮件用户。

希望它有帮助。

0

我已经弄明白如下代码 您需要在此处添加单个值侦听器,并检查您想要在表中搜索的数据是否存在。

mFirebaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(final DataSnapshot dataSnapshot) { 
       for (DataSnapshot data : dataSnapshot.getChildren()) { 
       //If email exists then toast shows else store the data on new key 
        if (!data.getValue(User.class).getEmail().equals(email)) { 
         mFirebaseDatabase.child(mFirebaseDatabase.push().getKey()).setValue(new User(name, email)); 
        } else { 
         Toast.makeText(ChatListActivity.this, "E-mail already exists.", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 

      @Override 
      public void onCancelled(final DatabaseError databaseError) { 
      } 
     });