Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Method invocation … may produce 'java.lang.NullPointerException'

#java #android #android_studio


В activity_main.xml отображаю view :




В методе onCreate внутри Activity:

setContentView(R.layout.activity_main);
EditText textEditText = (EditText)findViewById(R.id.textEditText);
textEditText.method();


Но при вызове любого метода у textEditText Android Studio предупреждает, что 


  Method invocation ... may produce 'java.lang.NullPointerException'


Разве такой исход возможен? Или это ошибка?
    


Ответы

Ответ 1



Это предупреждение означает, что на момент вызова textEditText.method(); в переменной textEditText может находиться null. Например, вследствии того, что findViewById перед этим не смог найти в вашем леяуте View для указанного id. В таком случае в textEditText запишется null

Ответ 2



Чтобы действительно получить null вместо EditText из вашей разметки, нужно заставить запуститься метод onCreate без отображения активити на экране. Например так: Создаём в классе активити дефолтный конструктор. В нём вызываем onCreate В onCreate создаём экземпляр класса активити. Вуаля - при создании экземпляра вызовется onCreate и приложение упадёт. Упасть оно, конечно, может уже и на setContentView. Я не проверял, конечно же, свою идею. Ещё оно, вроде, так ещё и в рекурсию может уйти, если, вдруг, не упадёт) Думаю студия как раз таки учитывает возможность вызова к-л метода из конструктора и просто не знает, что конструктор у активити переопределять и использовать не надо и ваш код в нормальных условиях падать не должен.

Ответ 3



Из комментариев становится ясным, что в данном примере NPE произойти не может и можно смело игнорировать это предупреждение.

Комментариев нет:

Отправить комментарий