调用需要 api 等级 19 当前最小值是 16 java.util.objects#requirenonnull

Call requires api level 19 current min is 16 java.util.objects#requirenonnull

一开始的代码是:

private void hideKeyboard()
    {
        View view = getCurrentFocus();
        if (view != null)
        {
            ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
                    .hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }

警告信息是:

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

所以我在提示下将代码更改为:

private void hideKeyboard()
    {
        View view = getCurrentFocus();
        if (view != null)
        {
            ((InputMethodManager) Objects.requireNonNull(getSystemService(Context.INPUT_METHOD_SERVICE)))
                    .hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }

这次的警告信息是:

call requires api level 19 current min is 16 java.util.objects#requirenonnull

我怎么知道?谢谢。

试试下面

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null) {
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

java.util.Objects class 已在 API 19 中添加到 Android 平台,因此尝试在任何设备上使用 class 及其方法 运行 ning API 18 或更低会导致崩溃。

通常,您可以通过在 运行 时检查设备的 API 级别来解决此问题,使用如下代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    // do your work here
}

KITKAT 常量定义为 19,因此,在本例中,我们的代码只会在具有 API 19 或更新版本的设备上 运行 .)

但是,在您的特定情况下,您真的只是想摆脱编译器警告;您 没有 来使用 Objects.requireNonNull() 这样做。如果您想要与 Objects.requireNonNull() 相同的 行为 ,您可以这样写:

InputMethodManager imm =
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

if (imm == null) {
    throw new NullPointerException();
}

imm.hideSoftInputFromWindow(view.getWindowToken(), 0);