Firebase добавление одинаковых ключей всегда без ошибок - PullRequest
0 голосов
/ 22 мая 2018

У меня есть проект Android.Я использую базу данных Firebase для чата в моем приложении.

У меня есть функция для создания пользователя, в этой функции я добавил всех новых пользователей как ключ , а не значение, чтобы сделать его уникальным.Нет проблем, я не могу добавить нового пользователя, если я пытаюсь добавить нового пользователя с существующим именем.

Но я всегда получаю ноль ошибка, хотя я пытаюсь добавить нового пользователя с тем же именем.Я думаю, что должен получить ошибку, если я попытаюсь добавить нового пользователя с тем же именем.

createUser:

private void createUser(final String uname){
    DatabaseReference dbref = firedb.getReference();

    final String testedUname = uname ;
    dbref.child("User").child(uname).setValue(true, new DatabaseReference.CompletionListener() {

        @Override
        public void onComplete(DatabaseError error, DatabaseReference ref) {

            if (error != null) {

               Log.d("firebaseTest","tested_uname: " + testedUname + " Data could not be saved. " + error.getMessage());
               requestNewUser();
            } else {

                Log.d("firebaseTest","tested_uname: " + testedUname + " Data saved successfully." );

                //Always, this else statement works although I write same username.
            }

        }
    });
}

Я добавил 5 новых значений.

Aaabbb

Aaabbb (!)

Aabbcc

Aa11aa

Aabbcc (!)

Iпредставьте, что во 2-й и 5-й строке код должен выдавать выходные данные, когда этот текст существует в базе данных:

Данные не могут быть сохранены.

Но он всегда дает вывод:

Данные успешно сохранены.

05-22 14:32:20.346 13402-13402/xxx D/firebaseTest: tested_uname: Aaabbb Data saved successfully.
05-22 14:32:34.666 13402-13402/xxx D/firebaseTest: tested_uname: Aaabbb Data saved successfully.
05-22 14:32:51.176 13402-13402/xxx D/firebaseTest: tested_uname: Aabbcc Data saved successfully.
05-22 14:33:06.026 13402-13402/xxx D/firebaseTest: tested_uname: Aa11aa Data saved successfully.
05-22 14:33:22.826 13402-13402/xxx D/firebaseTest: tested_uname: Aabbcc Data saved successfully.

окончательная база данных в базе данных

В результате мой CompletionListener всегда возвращает ноль для переменной ошибки.

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

1 Ответ

0 голосов
/ 22 мая 2018

Попробуйте это:

DatabaseReference reference = database.getReference("User").child(uname);
reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

         if (dataSnapshot.exists()) {
            // User already exists       
        } else {
            //CreateUser()
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...