我有这段代码很容易出错,所以我用try {} catch语句包装它。我不想回到之前的活动,我只是希望它保持当前活动,以便用户可以编辑它们的任何错误。
我该如何实现?
try{
orgi.insertOrThrow(tableName, null, values);
Toast.makeText(this, "You have successfully created a new profile!", 2).show();
gotoProfileList();
Log.e(getClass().getSimpleName(),"Successfully added to database");
}catch(SQLiteException se){
Log.e(getClass().getSimpleName(), "Database connection failed!" + se);
//Stay in this activity...
}finally{
if (orgi != null){
orgi.close();
}
}
忘了它,我能够通过显示一个告诉用户错误的alertDialog来解决我自己的问题。不管怎么说,多谢拉。 :)
try{
orgi.insertOrThrow(tableName, null, values);
Toast.makeText(this, "You have successfully created a new profile!", 2).show();
gotoProfileList();
Log.e(getClass().getSimpleName(),"Successfully added to database");
}catch(SQLiteException se){
Log.e(getClass().getSimpleName(), "Database connection failed!" + se);
displayError();
//stayInThisActivity();
}finally{
if (orgi != null){
}
public void displayError(){
AlertDialog.Builder error = new AlertDialog.Builder(this);
error.setMessage("That profile name already exists, try another one.").setCancelable(false).setPositiveButton("Yes",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = error.create();
alert.setTitle("Error");
alert.show();
}
答案 0 :(得分:2)
强制关闭是由未捕获的异常引起的。您只在示例中捕获SQLiteException。您需要捕获其他异常并优雅地处理它们。 现在,FC的经典原因是使用空对象并产生NullPointerExceptions。你不应该抓住这些。在许多情况下,您的应用程序将太乱以至于无法正常继续。您可以在此处阅读更多内容:Catch_NullPointerException
在任何情况下,您都应该在模拟器或连接的手机上运行应用程序,导致崩溃,然后使用DDMS或“adb logcat”登录设备日志。查看回溯,找到错误,修复它。如果您的应用程序在市场上,市场将列出您的用户设备发送的回溯。如果您(还没?)使用Android Market,您可以让您的应用程序通过在android-remote-stacktrace
的Web服务器上运行的PHP脚本远程记录堆栈跟踪BTW最好将Exception作为第三个参数传递给Log方法,而不是将第二个参数连接到异常(从而隐式调用toString())。在您的示例中:
Log.e(getClass().getSimpleName(), "Database connection failed!", se);