簡體   English   中英

在 Android SQLite 數據庫 onCreate() 中重新拋出異常

[英]Rethrow Exception in Android SQLite Database onCreate()

嘿,這是我的 SQLiteDatabase 的 onCreate 方法,在創建新數據庫時當然會調用它。 我想捕獲任何問題並記錄下來,然后將其重新拋出以供上面處理。 但是編譯器不允許我重新拋出異常,抱怨它沒有被處理。 這是在寫着“throw e;”的那一行。

@Override
public void onCreate(SQLiteDatabase db) {//arg0?
    db.beginTransaction();
    try {
        Checklist.createTable(db);
        Item.createTable(db);
        db.setTransactionSuccessful();
    } catch (Exception e) {
        Log.e(KnowUrStuffApp.TAG,"KusDBHelper.onCreate: " + e.getLocalizedMessage());           
        db.endTransaction();
        throw e;//SYNTAX ERROR: Unhandled Exception Type Exception
    }
}

您的問題是,您正在拋出一個已檢查的異常。 只有在出現此異常時才能執行此操作

  1. try/catch塊直接捕獲和處理
  2. 或者通過將throws SomeException添加到您的方法簽名來“向上”拋出異常。

但是,在您的情況下,您正在覆蓋onCreate() -方法,該方法(在基類中)不會拋出已檢查的異常。 因此,您不能重寫該方法並將throws添加到簽名中,因為那將不再是重寫。

你可以做的是,向上拋出一個RuntimeException ,不需要在方法簽名中添加:

Log.e(KnowUrStuffApp.TAG,"KusDBHelper.onCreate: " + e.getLocalizedMessage());           
db.endTransaction();
throw new RuntimeException(e); // Add the checked exception as the cause!

有關異常(拋出和捕獲)的更多信息,請參閱我的博客文章:捕獲實踐

public void onCreate(SQLiteDatabase db) throws Exception {//arg0?

編輯:謝謝,拋出*。

改變

public void onCreate(SQLiteDatabase db) {

public void onCreate(SQLiteDatabase db) throws Exception{

throws Exception添加到您的方法中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM