3

データベースがロックされていることを示す SQLiteException が webview から来ています。私は実際に自分のアプリケーションで webviews を使用していませんが、回答されていないこの他のスタック オーバーフローの質問に基づいて、admob に関連していると考えています。

私は自分のものにSQLiteを使用していますが、これが原因ではないはずですか? 私もそれを複製できないように見えるので、それを修正する方法がわかりません。何か案は?

android.database.sqlite.SQLiteException: error code 5: database is locked
at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1916)
at android.webkit.WebViewDatabase.flushCacheStat(WebViewDatabase.java:874)
at android.webkit.CacheManager.trimCacheIfNeeded(CacheManager.java:566)
at android.webkit.WebViewWorker.handleMessage(WebViewWorker.java:193)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.os.HandlerThread.run(HandlerThread.java:60)
4

4 に答える 4

3

複数のプロセスを使用していますか? あなたの活動は別のプロセスで始まったということですか?はいの場合、webview はデータベース管理にシングルトンを使用しているため、問題が発生する可能性があります。

于 2012-08-22T12:04:08.740 に答える
1

概要: 複数の接続

説明: データベース接続をシングルトンインスタンス(共有インスタンス)にする必要があります。私が考えることができるのは、このタイプのエラーは、ほとんどの場合、3つ以上のデータベース接続を開いている場合に発生します(同じsqliteデータベースに対しても)。したがって、アクティブな接続が1つだけであることを確認してください。これを行う最も簡単な方法は、データベースインスタンスをシングルトンにしてアプリ全体で共有することです。そうすることで(共有)、データベースにリンクする接続は常に1つだけになります。 。

于 2012-08-21T08:56:19.897 に答える
1

StrictMode を変更して、エラーに関する詳細情報を確認してください。メイン スレッドでのインターネット アクセス、同時実行の問題、多くの問題に関連している可能性があります。マニフェストを投稿して、このスタック トレースではあまり情報が得られないため、確認してアドバイスを求めてください。StrictMode を変更してメッセージを投稿することを忘れないでください。

;)

于 2012-08-20T22:26:01.253 に答える
1

これは、複数のスレッドが同時にデータベースを更新しようとすると発生します。コードに同期ブロックを追加することで、これを回避できます。

synchronized (this) {
        //update your database (one thread at time)
    }
于 2012-08-21T09:04:39.807 に答える