Ответ 1
Ответ @Niklas объясняет, почему вы получаете это предупреждение сейчас. Я хотел бы поделиться своими мыслями о том, что вы на самом деле должны делать.
Прежде всего, все, что делает эта добавленная обнуляемость, - это выявление дефекта старого дизайна, который присутствовал все эти годы - этот метод всегда мог вернуть ноль (например, отсоединенный фрагмент).
Я бы предпочел, чтобы они аннотировали возвращаемое значение как @NonNull и выдавали исключение внутренне, если этот метод вызывается, когда Activity на самом деле имеет значение null, но я понимаю, что это нарушит обратную совместимость и, как таковую, очень рискованно (хотя вряд ли я понимаю, почему Кто-нибудь вызывает этот метод, когда активность может быть нулевой).
Итак, что нам с этим делать?
Прежде всего, поскольку функциональность не изменилась вообще, если рассматриваемый код уже работал, тогда сделайте то, что предложил @CommonsWare - либо подавьте предупреждение, либо проигнорируйте его.
Вы также можете заключить каждый вызов в нулевую проверку, например, с исключением.
Однако я собираюсь поместить этот метод в мой BaseDialog (который расширяется всеми другими диалогами):
protected FragmentActivity getActivityNonNull() {
if (super.getActivity() != null) {
return super.getActivity();
} else {
throw new RuntimeException("null returned from getActivity()");
}
}
Обратите внимание, что все эти параметры фактически утверждают, что вы на самом деле не ожидаете, что будет возвращено значение NULL, и это нормально при сбое приложения, если это произойдет. Поэтому я сказал, что предпочел бы иметь это в коде библиотеки поддержки.
Редактировать:
Для поддержки фрагментов был добавлен новый метод - requireActivity(). Этот метод эквивалентен getActivityNonNull()
описанному выше (хотя он выдает IllegalStateException
если он не присоединен к Activity).
Используйте этот метод вместо getActivity()
и у вас все получится.