我正在尝试为catch块中的用户显示警告消息。不同之处在于我的try / catch位于主活动的onCreate()
内,因此只要应用程序打开就会执行。
我已尝试过此操作(我在活动结尾处有一个OnClick()
用于dialog.dismiss()
和this.finish()
之后的对话:
catch (SQLException e) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(getString(R.string.label_title_error))
.setIcon(R.drawable.error_icon)
.setMessage(getString(R.string.msg_error_sql))
.setPositiveButton(getString(R.string.label_ok), this);
AlertDialog dialogSQL = builder.create();
dialogSQL.show();
e.printStackTrace();
}
我也试过这个:
catch (NumberFormatException e) {
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle(getString(R.string.label_title_error));
dialog.setIcon(R.drawable.error_icon);
dialog.setMessage(getString(R.string.msg_error_numberformat));
dialog.setNeutralButton(getString(R.string.label_ok), null);
dialog.create().show();
e.printStackTrace();
}
在调试时强制异常,我可以看到它只是捕获异常,显示在LogCat中(作为警告)并保持流程直到它遇到另一个未处理的异常,然后显示默认的“抱歉!/强制关闭” Android对话框。并且LogCat中没有与对话框相关的其他异常。
为什么它不会为catch显示我的自定义AlertDialogs?我考虑过Builder需要的上下文,但是如果来自super()
的{{1}}在此代码之前,为什么它会显示消息?
谢谢大家。
更新:好的,按照要求,这里有更多的代码。
onCreate()
}
答案 0 :(得分:1)
AlertDialog
通常需要其父上下文才能正常工作(根据我的经验;如果我错了,有人会纠正我)。除非出现其他错误(如果没有完整的代码,很难说出来),如果将其移到onResume()
函数中,你可能会正常工作。
答案 1 :(得分:0)
这是活动生命周期的一个问题!
这就是我的所作所为:
} catch (NumberFormatException e) {
showDialog(
R.string.label_title_error,
R.drawable.error_icon,
R.string.msg_error_noservice,
R.string.label_ok);
error = true;
e.printStackTrace();
}
和此:
@Override
protected void onResume() {
Log.v("FLUXO", "PIN -->> ON RESUME");
super.onResume();
if (!error) {
if (!facade.isInitialized(serviceNames[0], this)) {
Intent itInicial = new Intent(this, InitialActivity.class);
startActivityForResult(itInicial, INSERT_SAL);
}
}
}