Предупреждение NullPointerException о getView() внутри метода onActivityCreated/onStart/onViewCreated

Я знаю, что getView() может возвращать null внутри метода onCreateView(), но даже если я помещу приведенный ниже код в методы onActivityCreated(), onStart() или onViewCreated(), он все равно покажет предупреждение о возможном NullPointerException в Android Studio (хотя моя программа работает без проблем). Как избавиться от этого предупреждения?

Я использую Фрагменты.

Код:

datpurchased = (EditText) getView().findViewById(R.id.datepurchased); 
//datpurchased defined as instance variable in the class

Предупреждение:

Вызов метода getView().findViewById(R.id.datepurchased) может привести к возникновению исключения java.lang.NullPointerException.


person abdfahim    schedule 08.05.2015    source источник


Ответы (1)


Android Studio основана на IntelliJ IDEA, и это функция IntelliJ, которая выдает вам предупреждения во время компиляции, когда вы не проверяете, является ли объект, возвращаемый методом, null перед его использованием.

Одним из способов избежать этого является программа в стиле, который всегда проверяет null или перехватывает NullPointerException, но он может стать очень многословным, особенно для вещей, которые, как вы знаете, всегда будут возвращать объект, а не null.

Другой альтернативой является подавление предупреждений в таких случаях с помощью аннотаций, таких как @SuppressWarnings для методов, которые используют объекты, которые, как вы знаете, никогда не могут быть нулевыми:

@SuppressWarnings({"NullableProblems"})
public Object myMethod(Object isNeverNull){
    return isNeverNull.classMethod();
}

или, в вашем случае, подавление на уровне строки:

//noinspection NullableProblems
datpurchased = (EditText) getView().findViewById(R.id.datepurchased); //datpurchased defined as instance variable in the class

Однако будьте уверены, что объекты никогда не могут быть нулевыми.

Дополнительную информацию об аннотациях IntelliJ @NotNull и @Nullable можно найти здесь. о проверках и их подавлении здесь.

person Aaron D    schedule 08.05.2015
comment
Я смог подавить свое предупреждение с помощью noinspection ConstantConditions. А вот ссылка про пресечение проверок очень пригодилась! - person iamreptar; 03.06.2015