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

Почему вылетает при проверке user != null

11.03.2019, 21:10. Показов 1345. Ответов 6

Author24 — интернет-сервис помощи студентам
При открытии приложения открывается регистрация, чтобы пропустить её я вставил код
Java
1
2
3
 if (user != null){
    startActivity(intent);
   }
Он работает. При входе если пользователь уже входил до этого. НО если пользователь входит впервые, то по нажатию на кнопку вход приложение вылетает и при повторном запуске он уже зарегистрирован и окно регистрации пропускается. Выдаёт ошибку
Java
1
Attempt to invoke virtual method 'boolean com.google.firebase.auth.FirebaseUser.isEmailVerified()' on a null object reference
КОД
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
44
45
46
47
48
//...
        FirebaseApp.initializeApp(getApplication());                                                              //Инициализация Firebase
        mAuth = FirebaseAuth.getInstance();                                                                     //Присваивание
        user = FirebaseAuth.getInstance().getCurrentUser();
 
 if (user != null){
    startActivity(intent);
   }
    @Override
    public void onClick(View view) {
        intent = new Intent(this, MainActivity.class);                                            //Переход в интент Main
        if (view.getId() == R.id.sign_id) {                                                                     //*Кнопка входа
            if (!email.getText().toString().equals("") && !password.getText().toString().equals(""))            //Если поля не пустые
            signin(email.getText().toString(), password.getText().toString());                                  //Выполнить вход
        } else if (view.getId() == R.id.registration_id) {                                                      //*Кнопка регистрации
            if (!email.getText().toString().equals("") && !password.getText().toString().equals(""))            //Если поля не пустые
                registration(email.getText().toString(), password.getText().toString());                        //Зарегистрироваться
        } else if(view.getId() == R.id.skip){                                                                   //*Кнопка пропустить
            startActivity(intent);                                                                              //Запустить MainActivity
            finish();                                                                                           //Закрыть
        } else if (view.getId() == R.id.forgotPassword_id){                                                     //*Кнопка забыли пароль
            forgotMail.show(getSupportFragmentManager(), "custom");
        }
    } //end onClick
    
    public void signin(String email, String password) {
        showProgressDialog();
        mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful() && user.isEmailVerified()) {                                                        
                        hideProgressDialog();
                        startActivity(intent);                                                                                  //Запустить активити
                        Toast.makeText(LoginActivity.this, "Aвторизация успешна", Toast.LENGTH_SHORT).show();      
                        finish();                                                                                               
                    } else if (task.isSuccessful()) {
                        hideProgressDialog();
                        Toast.makeText(LoginActivity.this, "Пользователь не подтвердил регистрацию", Toast.LENGTH_LONG).show();
                        Toast.makeText(LoginActivity.this, "На вашу почту было отправлено письмо с подтверждением регистрации!",
                                Toast.LENGTH_LONG).show();
                        user.sendEmailVerification();
                    } else if (!task.isSuccessful()) {
                        hideProgressDialog();
                        Toast.makeText(LoginActivity.this, "Неверные данные", Toast.LENGTH_SHORT).show(); 
                    }
                }
            });
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2019, 21:10
Ответы с готовыми решениями:

При проверке элемента массива на пустоту вылетает исключение
Всем привет. Есть сервис с задачей (Runnable) определить геолокацию, которая запущена в основном...

При работе с Json вылетает ошибка null reference
Есть условие if (WallParser.response.items.attachments.Count == 1) оно проверяет количество...

Сайт CodeWars при проверке решения выдаёт ошибку, при проверке в VisualStudio ошибки нет
Задача написать метод,который будет проверять порядок круглых скобок. Написал код, проверил в...

Почему при проверке заполнения массива выводятся неправильные значения?
// ConsoleApplication15.cpp: определяет точку входа для консольного приложения. // #include...

6
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
11.03.2019, 21:54 2
макс1122, потому, что пользователь не вошел.
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 338
12.03.2019, 01:26 3
Я не разбираюсь в firebase и не смотрел код внимательно,но мне лично в глаза бросается вот эта строчка:
Java
1
if (!email.getText().toString().equals("") && !password.getText().toString().equals(""))
А именно меня смутило,что объект email может быть равен null,а Вы сразу пытаетесь получить из него текст,не проверив на null.
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
12.03.2019, 01:37 4
Лучший ответ Сообщение было отмечено макс1122 как решение

Решение

Цитата Сообщение от макс1122 Посмотреть сообщение
user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null){
* * startActivity(intent);
* *}
При первом старте user==null, это очевидно, следовательно идём дальше:
Цитата Сообщение от макс1122 Посмотреть сообщение
user.isEmailVerified()
Вот и ошибочка.
1
0 / 1 / 0
Регистрация: 12.09.2017
Сообщений: 134
12.03.2019, 08:40  [ТС] 5
КАВ, а проверка через equals не тоже самое?

Добавлено через 3 минуты
ExFau$t, а как я ещё могу не допускать вход пользователей, которые не подтвердили адрес по почте? И если нажать на кнопку, то входит и вылетает так как почта подтверждение, если нет, то просто предупреждение в Toast
0
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
12.03.2019, 09:27 6
макс1122, 1. про сам объект: естли он - null, то у null getText() не воозьмешь (а он нужен для equals());
2. показывть окно входа.
1
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
12.03.2019, 10:11 7
Ну, наверное, не допускать их надо не вылетом, а проверить на null. Входит, потому что до onComplete успешно доходит.

Добавлено через 52 секунды
Забей на мутки с equals, это не имеет отношения к проблеме.
1
12.03.2019, 10:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2019, 10:11
Помогаю со студенческими работами здесь

Ошибка на проверке ASSERT: m_hWnd равен NULL
Такая проблемка: есть MDI приложение, дочерняя форма (скажем CView1) с разными контролами, по...

Почему вылетает программа при 32768, а при 20 все работает нормально?
Помогите исправить, почему программа вылетает при больших числах, а если поставить маленькие то все...

Почему при матрице 19х19 считает, а при 20х20 вылетает?
Здравствуйте, искал решение задачи коммивояжера полным перебором нашел тут: ...

При запуске вылетает,а почему?
#include &lt;iostream&gt; using namespace std; const int MAX=100; //ìàêñèìàëüíîå êîëè÷åñòâî ñèìâîëîâ â...


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

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

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