1

これは、SQLiteDatabaseのonCreateメソッドです。もちろん、新しいデータベースが作成されるときに呼び出されます。問題を見つけてログに記録し、それを再スローして上記の処理を行いたいと思います。ただし、コンパイラは、例外が処理されないことを訴えて、例外を再スローすることを許可していません。これは「throwe;」という行にあります。

@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
    }
}
4

4 に答える 4

3

問題は、チェックされた例外をスローしていることです。これは、この例外が次の場合にのみ実行できます。

  1. try/catch-blockによって直接キャッチおよび処理されます
  2. または、 method-signaturethrows 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!

例外(スローとキャッチ)の詳細については、私のブログ投稿:キャッチの練習を参照してください。

于 2012-07-18T14:43:15.257 に答える
1
public void onCreate(SQLiteDatabase db) throws Exception {//arg0?

編集:ありがとう、スロー*。

于 2012-07-18T14:28:18.967 に答える
1

変化する

public void onCreate(SQLiteDatabase db) {

public void onCreate(SQLiteDatabase db) throws Exception{
于 2012-07-18T14:29:56.750 に答える
1

メソッドに追加throws Exceptionします。

于 2012-07-18T14:30:27.727 に答える