4

しばらく前に、この質問を投稿しました: Android onUpgrade データベースが IllegalStateException を引き起こす

解決策は、データベースのアップグレード時にトランザクションを停止して再起動することでした:

public void onUpgrade(SQLiteDatabase db,
        int oldVersion, int newVersion) {

db.endTransaction();
//updgading the db
db.beginTransaction();
}

これは私のテストシステムで機能していましたが、今ではライフシステムから永続的なエラートレースを取得しています. ほとんどのシステムで動作しているようですが、一部のシステムでは動作していません。

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:278)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.IllegalStateException: no transaction pending
at net.sqlcipher.database.SQLiteDatabase.endTransaction(SourceFile:640)
at net.sqlcipher.database.SQLiteOpenHelper.getWritableDatabase(SourceFile:128)
at com.myApp.j.q(SourceFile:339) ...

ここで何が問題なのですか?ありがとうタタ

編集:これはクラッシュが発生する場所です。SQLiteOpenHelper.getWritableDatabase(ソースファイル:128)

int version = db.getVersion();
            if (version != mNewVersion) {
                db.beginTransaction();
                try {
                    if (version == 0) {
                        onCreate(db);
                    } else {
                        onUpgrade(db, version, mNewVersion);
                    }
                    db.setVersion(mNewVersion);
                    db.setTransactionSuccessful();
                } finally {
                    db.endTransaction(); //L. 128 crash
                }
            }
4

0 に答える 0