如何检查firebase中的重复数据

时间:2017-05-05 05:29:28

标签: android firebase firebase-realtime-database

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

if ((author_name != "pipeline" && author_email != "pipeline@gmail.com") && 
    (projectName.StartsWith("ej2") == false || projectName.StartsWith("Ej2") == false))
{
  // some operations
}

}

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

为了解决这个问题,我重新命令你为每个用户使用一个唯一的标识符。此标识符可以是由push()方法生成的唯一ID,uidemail address。我建议你最后一个选择。由于Firebase不接受密钥中的.之类的符号,因此您需要像这样进行电子邮件地址的发送:

  

name@email.com - >名@电子邮件,玉米

为实现此目的,以下两种方法可以帮助您encodedecode电子邮件地址。

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

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

假设您的数据库结构如下所示:

root
 |
 --- users
        |
        --- name@email,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是用户的编码电子邮件。

希望它有所帮助。

答案 2 :(得分: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) {
            }
        });