android如何解决:方法调用'getSystemService'

时间:2018-10-23 01:40:26

标签: android

我有启动Datepicker的片段。 Android Studio最近抛出了一条错误消息:“方法调用'getSystemService'可能在以下代码上产生'NullPointerException':

 context.drawImage(imageObj,0 ,0, 100, 100);

Android Studio建议的“修复”是“用'Objects.requireNonNull(getActivity())'代替”

这样做然后在“ .requireNonNull(getActivity())...”上引发另一个Android Studio错误

一个建议的修复程序可以清除上一条错误消息,从而对代码执行此操作:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    super.onCreateDialog(savedInstanceState);
    // Hide the soft keyboard when the fragment is created.
    InputMethodManager inputManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    ...
}

但是,以上是否意味着对于OS = 14的修补程序,而不是API 19(KITKAT)。我在这里想念什么?

3 个答案:

答案 0 :(得分:1)

Method invocation getSystemService may produce NullPointerException只是警告。它告诉您可以获取NullPointerException,因为getSystemService(Context.INPUT_METHOD_SERVICE)可能返回null。您只需要执行null检查:)

答案 1 :(得分:1)

这只是一个警告。您可以放心地忽略它。

为了更好地兼容Kotlin,Google在API 28的SDK中添加了一堆@Nullable和@NotNull批注。在Java中,没有功能上的区别,只是您现在将看到更多这些警告。

getActivity()在Fragment中通常不为null,除非您在初始化期间或附加上下文之前调用它。

答案 2 :(得分:1)

尝试

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    super.onCreateDialog(savedInstanceState);
    // Hide the soft keyboard when the fragment is created.
    if (getActivity() != null) {
        InputMethodManager inputManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        ...
    }
}