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



起初代码是:

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

我怎么知道?谢谢。

java.util.Objects类是在 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);

试试下面

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

相关内容

  • 没有找到相关文章

最新更新