我有一个必须创建数据库的应用程序,如果失败了,那么前进就没有意义了。我已经构建了一个AlertDialog和show()
它,但它从未显示过。由于缺少数据库,逻辑会失败,然后是barfs。
发布消息并停止活动的正确/最佳方式是什么?下面的代码执行正常(意味着在调试时发生show()
并且它落到下一行),但UI从不显示此警报。顺便说一句 - 我意识到投掷可能不是最优雅但我甚至没有那么远...... B ^)。
try {
myDBHelp.createDataBase();
} catch (IOException ioe) {
new AlertDialog.Builder(this).setCancelable(false)
.setMessage(ioe.getMessage())
.setTitle("Database Create Failed")
.setPositiveButton("Quit", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
throw new Error("Unable to create database - please try uninstall/reinstall");
}
})
.show();
答案 0 :(得分:0)
我不知道你用的是什么流程。但有一个建议 你可以这样做。
你可以像这样启动数据库操作..
Intent i = new Intent(this,Databaseoperation.class); startactivity(ⅰ); ............................... 这将使控件移动到databaseoperation类 它执行各种操作,如open.close,insert delete..etc。
U可以在内置类
中扩展databasehelper现在当打开数据库或任何东西出现问题时, 完成()意图并返回主要活动...
你可以这样做..
感谢rakesh
答案 1 :(得分:0)
我通常做这样的事情:
void myFunction() {
try {
somecode..
} catch (IOException e){
e.printStackTrace();
doToast("Unknown Error"); //Display Toast to user
return; //Leave myFunction
}
somecode... //If no error continue here
return;
}
protected void doToast(final String str) {
this.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(myClass.this, str, Toast.LENGTH_SHORT).show();
}
});
}
答案 2 :(得分:0)
createDataBase()
会抛出错误还是自己处理错误?如果它自己处理异常,那么它永远不会到达你的外部块,因此你永远不会通过catch块。确保在方法签名的末尾添加throws IOException
,如下所示:
public void createDataBase() throws IOException {[...]}
另外,请确保没有任何try / catch块捕获createDataBase()
内的 。
这样,每当IOException
发生时,它就被委托给你的外部catch块,你的对话框就会出现。