首先,代码是:
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
我怎么知道?谢谢。
答案 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);