转载简书,地址:https://www.jianshu.com/p/3f2b0ad3565b
错误描述
写了一个关闭软件盘的方法,结果在android9,android10上面都报NullPointerException异常;然后拿了一个android6的手机不报错,感觉有点坑,然后百度看见了简主写的逻辑,发现了还是写的不够严谨啊,里面还需要多加几层非空判断。
参考代码
/**
* 隐藏软键盘,要防止报空指针
*/
public static void hintKeyBoard(Activity activity) {
//拿到InputMethodManager
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
//如果window上view获取焦点 && view不为空
if (imm.isActive() && activity.getCurrentFocus() != null) {
//拿到view的token 不为空
if (activity.getCurrentFocus().getWindowToken() != null) {
//表示软键盘窗口总是隐藏,除非开始时以SHOW_FORCED显示。
imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
说明:
getCurrentFocus()
是拿到已经获得焦点的view
getCurrentFocus().getWindowToken()
是拿到window上的token