java-如何避免Firebase Realtime数据库中的重复数据

我目前正在开发一个Android应用程序,该应用程序将Firebase(实时功能)用作后端服务.另外,我已经开发了此功能,如下所示.

 

 

 private void checkUserExisting (){
    Dataa = mRef.getReference().child("Users");
    Dataa.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (!dataSnapshot.exists()){
                CreateUserProfile();
            }else {
                final String Uname = name.getText().toString().trim();
                final String Email = emailAddress.getText().toString().trim();
                Iterator<DataSnapshot> dataSnapshots = dataSnapshot.getChildren().iterator();
                while (dataSnapshots.hasNext())
                {
                    DataSnapshot dataSnapshotChild = dataSnapshots.next();
                    String EmailAddress = dataSnapshotChild.child("Email").toString();
                    String UserName = dataSnapshotChild.child("UserName").toString();
                    if (Uname.equals(UserName) || Email.equals(EmailAddress)){
                        Toast.makeText(Sgin_Up.this,"This user already exists",Toast.LENGTH_LONG).show();
                        break;
                    }else {
                        CreateUserProfile();
                    }
                }
            }
            }
        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

扩展
该代码工作得很好,并且它检查现有数据并显示Toast消息,但是在数据仍然进入数据库后,我想使重复数据无效.

最佳答案

创建新帐户或注册过程时,您可以检查用户是否已经存在,例如:

 

 

.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            boolean isNewUser = task.getResult().getAdditionalUserInfo().isNewUser(); 
           //retruns true if user is new 
          //false if user exits, move on login screen/forgot password etc.

        }
    })

并且您已经阻止了使用相同电子邮件地址创建帐户,这实际上使不必要的检查数据库中是否存在电子邮件地址,因为无法再使用相同电子邮件地址创建新帐户.

如果仍要检查数据库中电子邮件地址的存在,可以运行简单查询:

 

databaseReference.orderByChild("Email").equalTo(email).addListenerForSingleValueEvent....

如果不存在电子邮件,则会返回数据;如果不存在,则数据库中没有该电子邮件的用户.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值