Android异常 隐藏输入法键盘时InputMethodManager.hideSoftInputFromInputMethod

xiaoxiao2021-02-28  10

隐藏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。

转载请注明原文地址: https://www.6miu.com/read-1250256.html

最新回复(0)