Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 1 / 0
Регистрация: 12.09.2017
Сообщений: 134

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

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

Студворк — интернет-сервис помощи студентам
При открытии приложения открывается регистрация, чтобы пропустить её я вставил код
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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2019, 21:10
Ответы с готовыми решениями:

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

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

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

6
111 / 89 / 29
Регистрация: 07.01.2017
Сообщений: 456
11.03.2019, 21:54
макс1122, потому, что пользователь не вошел.
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
12.03.2019, 01:26
Я не разбираюсь в 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
Лучший ответ Сообщение было отмечено макс1122 как решение

Решение

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

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

Добавлено через 52 секунды
Забей на мутки с equals, это не имеет отношения к проблеме.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.03.2019, 10:11
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru