gpt4 book ai didi

java - 在 Android SQLite 数据库 onCreate() 中重新抛出异常

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:30 24 4
gpt4 key购买 nike

嘿,这是我的 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
}
}

最佳答案

您的问题是,您正在抛出一个checked 异常。只有在出现此异常时才能这样做

  1. try/catch block 直接捕获和处理
  2. 或者通过将 throws SomeException 添加到您的 method-signature 来“向上”抛出异常.

但是,在您的情况下,您要覆盖 onCreate() 方法,该方法(在基类中)不会抛出已检查的异常。因此,您不能重写该方法并将 throws 添加到签名中,因为那样就不再是重写了。

你可以做的是,向上抛出一个RuntimeException,不需要添加到方法签名中:

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

有关异常(抛出和捕获)的更多信息,请参阅我的博文:Catching practice

关于java - 在 Android SQLite 数据库 onCreate() 中重新抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11543658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com