起初代码是:
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);
}