БД db, проверяющая проблему дублирования идентификатора - PullRequest
0 голосов
/ 26 декабря 2018

я хочу проверить дублирование идентификатора

я хочу сделать код проверки дублирования идентификатора.
поэтому я получаю идентификатор, набранный пользователем, с помощью sid = id.getText().toString().trim();
, а затем создаю json деревья FirebaseDatabase.getInstance().getReference().child("users").child("id").setValue("add");
с использованием метода child () ...
и поместите значение с помощью метода setvalue().
, поскольку было невозможно использовать метод ondatachange() ... (я думаю,этот метод работает только при наличии данных, поэтому я поставил некоторые бесполезные данные) позже я удалю значение, которое есть в методе setvalue() (есть ли другой метод, который можно использовать, даже если нет изменений ... мне нужнопроверить содержимое БД) в любом случае if (data.getValue()==sid) эта часть
я думал, что он может проверить идентификатор ...
но он не работает

12-25 21:06:00.771 6700-6700/com.example.pc.login D/myTag: {id=add}

выглядит журнал Androidвот так ... id - это дочерняя часть ... а add - это значение, которое я поставил, это результат getvalue() метода ...

итогов: 1. как я могу поставитьid от пользователей к firebase db 2. как я могу получить единственное значение id, кроме дочерней части, когда я использую метод getvalue().он принимает имя ребенка и значение, которое я положил

, поэтому, если идентификатор существует ... пользовательский ... пользователь должен написать другое ... если нет ... firebase db хранит идентификаторпользователь сделал ...

спасибо за чтение ... помогите мне ...

idcheckbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //store the id user created
                sid = id.getText().toString().trim();

FirebaseDatabase.getInstance().getReference().child("users").child("id").setValue("add");



FirebaseDatabase.getInstance().getReference().addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot data: dataSnapshot.getChildren()){
                        if (data.getValue()==sid) {
                            Log.d("myTag",""+dataSnapshot.getChildren());
                            Toast.makeText(MainActivity.this, "aleady exists",Toast.LENGTH_SHORT).show();


                        } else {
                            Toast.makeText(MainActivity.this, "you can use this id",Toast.LENGTH_SHORT).show();
                            FirebaseDatabase.getInstance().getReference().child("users").child("id").setValue(sid);
                            Log.d("myTag",""+data.getValue());
                        }
                    }
                }


                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }


            });
        }
    });

1 Ответ

0 голосов
/ 26 декабря 2018

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

Нет *Метод 1005 * запускается один раз, когда прослушиватель подключен, есть ли данные или нет.

Если путь к базе данных, к которой присоединен ValueEventListener, пуст / ноль / не существует, то dataSnapshot.exits() вернетfalse.

Следовательно, здесь может быть ваш окончательный код:

idcheckbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    sid = id.getText().toString().trim();

    // No need to store the id user created
    // FirebaseDatabase.getInstance().getReference().child("users").child("id").setValue("add");

    FirebaseDatabase.getInstance().getReference().child(sid).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                // sid already exists
            } else {
                // sid does not exists already
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}
});

Кстати, ваша база данных Firebase будет выглядеть примерно так:

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