调用要求api级别19当前最小值为16 java.util.objects#requirenonnull

时间:2018-08-28 16:05:36

标签: android android-studio android-studio-3.1.4

首先,代码是:

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

警告消息是:

  

方法调用“ hideSoftInputFromWindow”可能会产生   'java.lang.NullPointerException'

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

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

这一次警告消息是:

  

通话需要api级别19当前最小值为16   java.util.objects#requirenonnull

我怎么知道?谢谢。

2 个答案:

答案 0 :(得分:0)

尝试以下

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

答案 1 :(得分:0)

java.util.Objects class已在API 19中添加到Android平台,因此尝试在运行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);