我刚刚收到我的应用程序崩溃的Fabric邮件,我在移动设备上对其进行了测试,但是运行正常,但是我不为什么它在OS 9上崩溃。
context = this;
RelativeLayout parentView = findViewById(R.id.relative_cusweb_parent);
setupParent(parentView);
上面是我的 onCreate 方法, relative_cusweb_parent 是CustomWeb类的主要相对布局。
private void setupParent(View view) {
if (!(view instanceof EditText)) {
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideKeyboard();
return false;
}
});
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupParent(innerView);
}
}
}
private void hideKeyboard() {
input.clearFocus();
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
{
imm.hideSoftInputFromWindow(Objects.requireNonNull(getCurrentFocus()).getWindowToken(), 0); // here a is crashing
}
}
应用程序在此行崩溃
imm.hideSoftInputFromWindow(Objects.requireNonNull(getCurrentFocus()).getWindowToken(), 0);
和下面是日志
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
at codeline.onlinebills.activities.CustomWeb.hideKeyboard(CustomWeb.java:222)
at codeline.onlinebills.activities.CustomWeb.access$200(CustomWeb.java:38)
at codeline.onlinebills.activities.CustomWeb$4.onTouch(CustomWeb.java:231)
at android.view.View.dispatchTouchEvent(View.java:12611)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3035)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2714)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2671)
答案 0 :(得分:0)
您可以使用此方法隐藏键盘:
private void hideKeyBoard()
{
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if( imm != null )
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
答案 1 :(得分:0)
尝试用下面的代码替换您的hideKeyboard方法,我正在使用这是我的应用程序来隐藏键盘,并且效果很好:
private void hideKeyboard() {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
答案 2 :(得分:0)
由于无法在焦点上找到任何视图而崩溃,并且getCurrentFocus()返回null。
在API级别1中添加
公共抽象视图getCurrentFocus()
在此窗口中返回当前具有焦点的视图,如果没有,则返回null。请注意,这不会出现在任何包含Window的窗口中。 (source)
替换此:
imm.hideSoftInputFromWindow(Objects.requireNonNull(getCurrentFocus()).getWindowToken(), 0);
与此:
imm.hideSoftInputFromWindow(getWindow().getDecorView().getRootView().getWindowToken(), 0);