Как проверить, существует ли значение в firebase с android? - PullRequest
0 голосов
/ 25 апреля 2018

Итак, я недавно узнал о базе данных Firebase, и теперь я могу вставить данные. У меня есть этот скрипт, который должен хранить данные в моей базе данных.

mDatabase = FirebaseDatabase.getInstance().getReference("Biodata");
String userId = mDatabase.push().getKey();
Biodata bio = new Biodata("MyUser", "MyUser@email.com");
mDatabase.child(userId).setValue(bio);

Сценарий, приведенный выше, находится в oncreate, поэтому, когда я снова и снова запускаю актив, данные будут вставлены дважды или более

и вот моя база огня

Biodata
-LAuyJho4kTnJt5WuCtJ 
    Email:  "MyUser@email.com" 
    Fullname:  "MyUser"

Мой класс бидата

@IgnoreExtraProperties
public class Biodata {

    public String Fullname;
    public String Email;

    public Biodata() {
    }

    public Biodata(String Fullname, String Email) {
        this.Fullname = Fullname;
        this.Email = Email;
    }

}

Итак, как я могу запретить моему приложению вставлять одни и те же данные дважды?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Прежде всего, вам не нужно вызывать его в методе onCreate.Но есть еще один простой способ не создавать дубликаты.Вы должны создать случайный ключ для каждого пользователя.Мол, скажем, идентификатор электронной почты уникален для всех пользователей.Итак,

mDatabase = FirebaseDatabase.getInstance().getReference("Biodata");
Biodata bio = new Biodata("MyUser", "MyUser@email.com");
mDatabase.child("MyUser@email.com").setValue(bio);

Таким образом, данные пользователя находятся под его собственным идентификатором электронной почты.Вам будет проще узнать подробности.Кроме того, это не будет создавать дубликаты, так как идентификатор электронной почты является уникальным.В Firebase это будет выглядеть так:

Biodata
 MyUser@email.com
    Email:  "MyUser@email.com" 
    Fullname:  "MyUser"

Так что позже, если вы хотите получить имя пользователя, вам просто нужно

DatabaseReference ref= mDatabase.child("MyUser@email.com");

 ref.addListenerForSingleValueEvent(new ValueEventListener() {
 @Override
 public void onDataChange(DataSnapshot dataSnapshot) {
    Biodata bio = dataSnapshot.getValue(Biodata .class);
    // and bio.getName() for getting the name
 }

 @Override
 public void onCancelled(DatabaseError databaseError) {

 }
 });
0 голосов
/ 25 апреля 2018

Вы не должны добавлять электронную почту в качестве родительского узла, иначе вы получите ошибку.

Сначала вы добавляете данные дважды, потому что у вас это под onCreate(), оно должно быть под кнопкойили любое событие, которое может произойти.

Во-вторых, вы генерируете случайный идентификатор, используя push(), поэтому каждый раз, когда вызывается onCreate(), будут добавляться новые данные, поскольку push() используется для разделения записей.

Чтобы предотвратить эту проблему, добавьте создание пользователя под кнопкой (например, под кнопкой «Зарегистрироваться»).

Если вы хотите оставить его под onCreate(), выполните следующие действия:

mDatabase = FirebaseDatabase.getInstance().getReference("User");
FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
String userId=user.getUid();
Biodata bio = new Biodata("MyUser", "MyUser@email.com");
mDatabase.child(userId).setValue(bio);

Вышеописанное будет работать, если вы используете аутентификацию с помощью firebase, а также после входа в систему пользователя.getUid() будет извлекать идентификатор пользователя из аутентификации firebase, которая является уникальной для каждого пользователя.Тогда вы сможете добавить его в базу данных.

0 голосов
/ 25 апреля 2018

Пожалуйста, попробуйте ниже код может помочь вам

public void setData(){
        final DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference();
        Query queryToGetData = dbRef.child("Biodata")
                .orderByChild("Email").equalTo("MyUser@email.com");
        queryToGetData.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if(!dataSnapshot.exists()){
                    String userId = dbRef.child("Biodata").push().getKey();
                    Biodata bio = new Biodata("MyUser", "MyUser@email.com");
                    dbRef.child("Biodata").child(userId).setValue(bio);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...