0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 15
1

Запись пользователя в Realtime Database при регистрации

19.03.2019, 18:02. Показов 584. Ответов 1

Author24 — интернет-сервис помощи студентам
Это код из одного курса на Pluralsight

Объясните, пожалуйста, почему здесь signOut() и redirectLoginScreen() дублируются для onComplete и onFailure после попытки записи в БД? Разве не логичнее добавить их в конце, раз уж в любом случае нужно разлогиниться после регистрации и перейти на LoginActivity?

И когда нужно использовать только if (task.isSuccessful()){...} else {...}, как автор сделал для createUserWithEmailAndPassword, а когда вместо этого нужны два слушателя - onComplete и onFailure, как он сделал для setValue()?
Чем отличаются по сути !task.isSuccessful() и onFailure()?


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
 
            if (task.isSuccessful()){
                
                // создаём экземпляр класса User
                // ...
                
                FirebaseDatabase.getInstance().getReference()
                        .child(getString(R.string.dbnode_users))
                        .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                        .setValue(user)
                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                FirebaseAuth.getInstance().signOut();
 
                                //redirect the user to the login screen
                                redirectLoginScreen();
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(RegisterActivity.this, "something went wrong.", Toast.LENGTH_SHORT).show();
                        FirebaseAuth.getInstance().signOut();
 
                        //redirect the user to the login screen
                        redirectLoginScreen();
                    }
                });
 
            }
            if (!task.isSuccessful()) {
                Toast.makeText(RegisterActivity.this, "Unable to Register",
                        Toast.LENGTH_SHORT).show();
            }
            hideDialog();
 
            // ...
        }
    });
По какой-то причине у меня происходит запись пользователя в базу данных через раз (иногда записывает, иногда нет), я пытаюсь понять, могли ли такие отличия в моём коде повлиять на это.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2019, 18:02
Ответы с готовыми решениями:

Массивы в Firebase Realtime Database
Всем привет! Допустим есть некий массив в БД Firebase, вот: Для андроид студио сделан код чтобы...

FireBase | Realtime DataBase Rules| как это настроить?
Здравствуйте! в правилах FB следующее: { &quot;rules&quot;: { &quot;users&quot;: { &quot;$uid&quot;: { ...

Ошибка при регистрации (no database selected)
Ошибка при регистраций не знаю как исправить Warning: mysqli_num_rows() expects parameter 1 to be...

Проверка пользователя при регистрации
Есть такая функция function auth_user($name,$pass) { $file_array = file('member.php'); ...

1
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
19.03.2019, 22:40 2
Цитата Сообщение от th1ngshappen Посмотреть сообщение
Объясните, пожалуйста, почему здесь signOut() и redirectLoginScreen() дублируются для onComplete и onFailure после попытки записи в БД?
Быть может потому, что юзер залогинился и должен пройти дальше независимо от проблем с бд.
Цитата Сообщение от th1ngshappen Посмотреть сообщение
Чем отличаются по сути !task.isSuccessful() и onFailure()?
Там вообще-то два абсолютно разных метода.
0
19.03.2019, 22:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2019, 22:40
Помогаю со студенческими работами здесь

Ошибка в БД при регистрации пользователя
всем привет, таблицу создал так: $name = &quot;users&quot;; $query = &quot;CREATE TABLE IF NOT EXISTS...

Ошибка при регистрации пользователя
Всем привет! Достался в наследство сайт на vuejs, сам в этой технологии не силён. Случилась...

Ошибка при регистрации пользователя
Регистрация работала, добавила активацию по емейл, теперь при нажатии &quot;зарегистрироваться&quot; выдает...

Проверка существующего пользователя при регистрации
Всем доброго времени. Пилю форму регистрации в БД а для этого проверяю по имени,фамилии и отчеству...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru