2010-09-02 52 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

相關問題