Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在firebase中检查重复数据_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 如何在firebase中检查重复数据

Android 如何在firebase中检查重复数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我用的是firebase。我想为我的应用程序检查重复数据。目前我允许用户输入姓名和电子邮件。但如果用户第二次输入相同的名称和电子邮件,它也会被添加到数据库中。 如何解决这个问题 这是我的密码: package com.example.zaid_pc.mpd2; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.wi

我用的是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();




        }
    });


}

}

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

从以下代码中检查用户名是否存在

根据您的需要修改此代码

参考

为了解决这个问题,我建议您为每个用户使用一个唯一的标识符。此标识符可以是由
push()
方法生成的唯一id、
uid
电子邮件地址。我建议你做最后一个选择。由于Firebase不接受密钥中类似
的符号,因此您需要对电子邮件地址进行如下编码:

root
 |
 --- users
        |
        --- name@email,com
                |
                --- uid: 4362454274745
                |
                --- name: John
name@email.com -> name@email,com

要实现这一点,这里有两种方法可以帮助您
编码
解码
电子邮件地址

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
是用户的编码电子邮件


希望能有所帮助。

我已经像下面的代码一样解决了这个问题 您需要在此处添加单值侦听器,并检查要搜索到表中的数据是否存在

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

Firebase数据库结构的后期可能重复