2012-08-13 70 views
3

我得到一個SQLiteException,說數據庫被鎖定來自webview。我實際上並沒有在我的應用程序中使用任何Web瀏覽器,但我相信它與基於this other stack overflow question的admob相關,這是沒有答案的。Webview SQLiteException:數據庫被鎖定

我使用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) 

回答

1

嘗試修改StrictMode以查看有關錯誤的更多信息。它可能與主線程上的Internet訪問,併發問題以及很多問題有關,因此請嘗試發佈清單以查看和建議您,因爲此堆棧跟蹤沒有提供如此多的信息。並記住修改StrictMode併發布消息。

1

總結:超過1連接

描述:您需要使數據庫連接的單個實例(共用的實例)。我能想到的是;當你有超過2個數據庫連接打開時(甚至是相同的sqlite數據庫),這種類型的錯誤通常會出現。所以確保你只有一個連接活動,最簡單的方法就是在整個應用程序中創建你的數據庫實例單例和共享,並且這樣(共享)你將只有一個連接將你連接到數據庫。

1

當多個線程同時更新數據庫時會發生這種情況。您可以通過向代碼中添加syncronized塊來避免此情況。

synchronized (this) { 
     //update your database (one thread at time) 
    } 
3

您是否使用多個進程?我的意思是你的活動是從不同的過程開始的? 如果是,它可能會導致問題,因爲webview使用單身管理數據庫管理。

+1

是的,實際上,我有兩個MapViews在不同的進程中,現在不記得爲什麼了,但是在不同的活動中使用地圖視圖時遇到了一些問題,並將它們放在不同的進程中。 – Jack 2012-08-22 16:10:07

+0

對不起,但現在我不知道如何解決這個問題。也許只能在一項活動中使用adview,但我知道這不是一個解決方案。 – hsafarya 2012-08-22 16:23:59