隐藏Android输入法键盘时,调用的方法如下:
public void hideInput(Activity activity){
InputMethodManager imm = (InputMethodManager) getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(activity.getCurrentFocus().getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
产生异常信息如下:
08-04 16:20:43.009 1453 1453 E AndroidRuntime: Caused by: java.lang.NullPointerException
08-04 16:20:43.009 1453 1453 E AndroidRuntime: at com.xx.McpttApp.hideInput(McpttApp.java:451)
08-04 16:20:43.009 1453 1453 E AndroidRuntime: at com.xx.main.contacts.FilterActivity.onBackButtonClick(FilterActivity.java:305)
08-04 16:20:43.009 1453 1453 E AndroidRuntime: ... 14 more
08-04 16:20:43.019 495 506 I ActivityManager: Notify an ApplicationCrash
08-04 16:20:43.019 495 506 W ActivityManager: Force finishing activity com.xx/.main.contacts.FilterActivity
08-04 16:20:43.589 495 549 W ActivityManager: Activity pause timeout for ActivityRecord{41f58cd0 com.xx/.main.contacts.FilterActivity}
异常原因分析:
该方法直接调用activity.getCurrentFocus().getApplicationWindowToken();此处容易产生空指针异常。
举例:若设备同时支持按键和触屏,当通过按键输入过滤字母或数字时,进入FilterActivity,此时没有通过EditText输入框进行输入,所以没有弹出输入法键盘,此时activity.getCurrentFocus() 为null,若不判断直接执行activity.getCurrentFocus().getApplicationWindowToken(),则报空指针NullPointerException异常。
所以对可能产生Null对象的地方应该加上判断,不然的话应用会crash。