2010-09-02 56 views
0

我有一个应用程序,必须创建一个数据库,如果失败了,那么没有任何意义前进。我已经构建了一个AlertDialog和show()它,但它从不显示。由于缺少数据库,逻辑贯穿始终,然后落入酒吧。什么是停止活动并提醒用户的最佳方式?

发出消息并暂停活动的正确/最佳方式是什么?下面的代码执行得很好(意味着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

我后容易做这样的事情:

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(); 
     } 
    }); 

} 
+0

使用敬酒当然是有效的,但我想知道如果我会有同样的问题。问题是用户界面没有显示我的对话框之前,它呕吐。结果,重写的onResume()在对话框显示之前执行,并且在那里失败,因为代码期望数据库。如果没有以前的错误,我必须放入一个布尔值并且只测试/执行相关的代码。一旦onResume()完成,对话框显示。我非常确定,一旦我保护了onResume()代码,Toast就可以工作。谢谢。 – teachableMe 2010-09-05 13:16:44

0

我不知道你用什么流程。但有一个建议 你可以这样做。

U可以启动数据库的操作这样的..

意图I =新意图(此,Databaseoperation.class);起始活动(i); ............................... 这将使控件移动到数据库操作类 它执行各种操作,如打开。关闭,插入删除..等等。

U可以在内置类

延长databasehelper,现在当在打开的数据库或任何东西, 完成()的意图和返回的主要活动有任何问题......

U可以使它像这个..

感谢拉克什

+0

Rakesh-问题不在于捕捉错误。它让用户知道出了问题,并防止无用的代码发生和炸毁。我想知道使用Intent是否会让这种情况变得更糟 - 踢出异步数据库线程时,实际上我想阻止/等待它完成 - 没有数据库,也没有应用程序。 – teachableMe 2010-09-02 13:09:52

0

createDataBase()是否会抛出错误或自己处理它?如果它自己处理异常,那么它永远不会到达你的外部块,因此你永远不会通过catch块。确保有throws IOException在这样的方法签名的末尾增加:

public void createDataBase() throws IOException {[...]} 

另外,请确保没有内部的createDataBase()任何try/catch块捕捉IOException异常

这样,无论何时出现IOException,它都会被委托给您的外部catch块,您的对话框将会出现。

+0

哦该死的为什么这是在新的问题下......我只注意到现在这个职位已经快7岁了...... – Aenadon 2017-02-04 16:10:39

相关问题