![](/img/trans.png)
[英]Populate ListView From SQLite database in onCreate() in Android
[英]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
}
}
您的問題是,您正在拋出一個已檢查的異常。 只有在出現此異常時才能執行此操作
try/catch
塊直接捕獲和處理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.