Как мне изменить это исключение?

#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?»