java.lang.NullPointerException: Attempt to invoke virtual method
'android.os.IBinder android.view.View.getWindowToken()' on a null object reference
// 隐藏软键盘
public void hideKeyboard(){
InputMethodManager inputManager = (InputMethodManager)
this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
///this.getCurrentFocus().getWindowToken() 有时拿的windowToken为空,没有获取到焦点,所以会抛出异常
修改写法:
// 隐藏软键盘
public void hideKeyBoard(View view) {
//
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(view.getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
查看stackoverflow:
Everybody above correctly pointed that the getWindowToken() was returning null.
I was using the default code getCurrentFocus().getWindowToken() to hide keyboard when I encountered the same issue.
I then realized that as there's no View obtaining the focus I got the NullPointerException.
We can change the above to:
**anyView.getWindowToken()**
where anyView is simply any view in your layout.
指出隐藏软键盘如果使用 getCurrentFocus().getWindowToken()会出现无法获取focus出现NullPointerException所以修改也是很简单使用任意的获取焦点View调用。
参考:http://stackoverflow.com/questions/19069448/null-pointer-error-with-hidesoftinputfromwindow
http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android