所以我有一个webview和一个菜单。当我打开时它工作正常。我设置如果webview进度不是0或不是100(所以当加载页面时)webview重新加载菜单项不可见(所以你看不到),并且停止菜单项是可见的。如果webview加载了页面(因此进度100)或者无法加载页面(进度0),则重新加载菜单项将变为可见,并且停止菜单项将变为不可见。我说,它工作正常......直到我退出应用程序。 (我不清楚系统历史)。
我重新打开了应用。崩溃!为什么?如果我从应用程序的系统历史记录中删除它,它不会崩溃。我销毁了活动(在代码中),但它无法正常工作。
// ...
@Override
public void onProgressChanged(WebView view, int progress) {
progressBarLoad.setProgress(progress);
int prInt = progressBarLoad.getProgress();
if (prInt > 0 && prInt < 100) {
menuMain.findItem(R.id.MenuExit).setVisible(true);
menuMain.findItem(R.id.MenuReload).setVisible(false);
}
if (prInt == 100 || prInt == 0) {
menuMain.findItem(R.id.MenuExit).setVisible(false);
menuMain.findItem(R.id.MenuReload).setVisible(true);
}
}
//...
的onkeydown:
@Override
public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && !webViewMain.canGoBack()) {
if (booleanOnKeyDown) {
new AlertDialog.Builder(this)
.setTitle(getString(R.string.SureExitTitle))
.setPositiveButton(getString(R.string.Yes), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
onDestroy();
}
})
.setNegativeButton(getString(R.string.No), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).show();
}
}
return super.onKeyDown(keyCode, event);
}
日志:
10-26 12:41:15.867 14008-14008/com.zokni1996.android_forum W/System.err﹕ java.lang.NullPointerException
10-26 12:41:15.867 14008-14008/com.zokni1996.android_forum W/System.err﹕ at com.zokni1996.android_forum.Main.Main$6.onProgressChanged(Main.java:451)
10-26 12:41:15.867 14008-14008/com.zokni1996.android_forum W/System.err﹕ at com.android.webview.chromium.WebViewContentsClientAdapter.onProgressChanged(WebViewContentsClientAdapter.java:271)
答案 0 :(得分:1)
我解决了问题(是的,这是一个非常非常糟糕的解决方案)。这是一个零点异常。我用过try-catch。
// ...
@Override
public void onProgressChanged(WebView view, int progress) {
progressBarLoad.setProgress(progress);
if (progressBarLoad.getProgress() > 0 && progressBarLoad.getProgress() < 100) {
try {
menuMain.findItem(R.id.MenuExit).setVisible(true);
menuMain.findItem(R.id.MenuReload).setVisible(false);
} catch (Exception e) {
Log.i("Menu failed reload or stop ", "" + e);
}
} else {
try {
menuMain.findItem(R.id.MenuExit).setVisible(false);
menuMain.findItem(R.id.MenuReload).setVisible(true);
} catch (Exception e) {
Log.i("Menu failed reload or stop", "" + e);
}
}
}
//...