#nullpointerexception
#исключение nullpointerexception
Вопрос:
Я новичок в Android Studio.
Я получаю
java.lang.Исключение NullPointerException: попытка вызвать виртуальный метод ‘java.lang.Строка com.alpha1.appname.rider.model.firebase.User.getName()’ в нулевой ссылке на объект.
Кто-нибудь может указать мне правильное направление. Кажется, я не могу исправить ответы на другие подобные вопросы.
Вот строка, которая создает исключение нулевого указателя
private void setDriverData() {
View navigationHeaderView = navigationView.getHeaderView(0);
TextView tvName = navigationHeaderView.findViewById(R.id.tvDriverName);
TextView tvStars = navigationHeaderView.findViewById(R.id.tvStars);
CircleImageView imageAvatar= navigationHeaderView.findViewById(R.id.imageAvatar);
tvName.setText(Common.currentUser.getName());
if(Common.currentUser.getRates() != null amp;amp;
!TextUtils.isEmpty(Common.currentUser.getRates()))
tvStars.setText(Common.currentUser.getRates());
if(Common.currentUser.getAvatarUrl()!=null amp;amp;
!TextUtils.isEmpty(Common.currentUser.getAvatarUrl()))
Picasso.get().load(Common.currentUser.getAvatarUrl()).into(imageAvatar);
Ответ №1:
Это проблемная строка:
tvName.setText(Common.currentUser.getName());
Сообщение об ошибке сообщает вам, что вы не можете вызвать getName
of null
. Это означает, что Common.currentUser
есть null
. Что-то null
означает, что оно не определено. Ссылка на элементы данных или вызов методов чего-то, чего не существует, приведет к этой ошибке. Вы можете исправить эту проблему, правильно инициализировав Common.currentUser
перед выполнением этой строки или выполнив ее по умолчанию, если она не была определена, например:
tvName.setText((Common.currentUser == null) ? "" : Common.currentUser.getName());
Комментарии:
1. Спасибо за ваш ответ, ошибка перенесена с первой строки на вторую. Есть ли шанс, что вы сможете показать мне, как правильно структурировать код? Я очень ценю вашу помощь.
2. @EmileJansen добро пожаловать! В общем случае мы помещаем строки внутри одного и того же блока по вертикали, поэтому мы сразу видим, где начинается блок и где он заканчивается. Если мы разбиваем длинные логические выражения на несколько строк ради удобства чтения, то выравниваем их по вертикали, так будет визуально приятно смотреть на код, и код невербально покажет, где начинается выражение/блок/метод и где он заканчивается. Помимо этого, структурирование кода — довольно глубокая тема, и если у вас есть путаница по этому поводу, я рекомендую прочитать несколько статей на эту тему, они, вероятно, помогут.
3. Спасибо за ваш отзыв, Лайош, есть ли шанс, что я мог бы опубликовать часть кода, с которым я борюсь, чтобы вы могли оставить мне отзыв? Я обязательно прочитаю об исключениях такого рода, однако сейчас мне просто нужна помощь с этим. Я буду посылать вам кофе всю дорогу из Южной Африки☺
4. @EmileJansen если вы случайно зулу, тогда Савубона, unmgane. На других языках я знаю еще меньше. Теперь я рад взглянуть на ваш код, но запрос на проверку кода выходит за рамки SO, поэтому у вас есть три варианта: 1. Вы можете создать ссылку на свой код, чтобы я мог посмотреть. 2. Вы можете создать более целенаправленный вопрос о второй проблеме (мое предпочтение). 3. Вы можете запросить проверку кода на сайте, где это по теме. Я рекомендую задать более целенаправленный вопрос здесь, на SO, связав его здесь в комментариях и разместив свой код для проверки кода в других источниках.
5. Спасибо за отзыв, Лайош. Я из Кейптауна, поэтому говорю на африкаанс. «Goeie dag, hoe gaan dit?»