DialogFragment getActivity()“可能为空”AndroidStudio 3.0.1中的lint警告
我能找到的最接近的现有问题是Android Studio 3.0 lint warnings for references to activity,但它没有帮助。DialogFragment getActivity()“可能为空”AndroidStudio 3.0.1中的lint警告
使用AndroidStudio 3.0.1,我有一个DialogFragment
,我这样做平常的东西:
@Override @NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
...
我在我有一个lint警告的呻吟是Argument 'getActivity()' might be null
。
我明白为什么getActivity()
可能是空的,我明白了皮棉检验如何知道这(从@Nullable
注释)。
我的问题是:这一切都很好,getActivity()
可能为空,但实际上我应该如何处理这种优雅和整洁? onCreateDialog
必须返回一个Dialog
(因为超类'@Nullable
注释)所以我必须有活动上下文来创建它。
我可以认为onCreateDialog
永远不会被调用,如果DialogFragment
没有附加到一个活动,但仍然 - 我如何解决不整洁的皮棉警告?
回答:
这是 - Android Studio 3.0 lint warnings for references to activity的副本。
tldr; getActivity()
用Support lib 27.0.0注释@Nullable
和静态分析工具现在挑选。
回答:
@Niklas的答案解释了为什么你现在得到这个警告。我想分享我对你实际应该做什么的想法。
首先,所有这些添加的可空性确实暴露了这些年来一直存在的旧设计缺陷 - 这种方法总是可以返回空值(例如碎片分离)。
我宁愿他们注释返回值为@NonNull并在内部抛出异常,如果这个方法在Activity实际为空时被调用,但我知道它会破坏向后兼容性,因此非常危险(尽管我可以几乎看不出为什么任何人在Activity实际上可以为null时调用此方法)。
那么,我们应该怎么做呢?
首先,由于功能完全没有改变,如果有问题的代码已经工作,然后做@CommonsWare建议 - 要么禁止警告或忽略它。
您也可以将每个电话打包为空检查,例如,例外。
什么,我要做的事情,但是,把这种方法在我BaseDialog(这是由所有其他对话扩展):
protected FragmentActivity getActivityNonNull() { if (super.getActivity() != null) {
return super.getActivity();
} else {
throw new RuntimeException("null returned from getActivity()");
}
}
注意,所有这些选项有效状态,你不要”如果发生这种情况,我们真的希望返回null,并且在应用程序崩溃时可以正常运行。这就是为什么我说我宁愿有支持库代码。
以上是 DialogFragment getActivity()“可能为空”AndroidStudio 3.0.1中的lint警告 的全部内容, 来源链接: utcz.com/qa/266131.html