WebView中的android.database.sqlite.SQLiteException

时间:2014-11-03 05:53:43

标签: android android-webview android-sqlite

这些是我从Developer console获得的堆栈跟踪:

android.database.sqlite.SQLiteException: cannot rollback - no transaction is active (code 1)
at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method)
at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:555)
at android.database.sqlite.SQLiteSession.endTransactionUnchecked(SQLiteSession.java:439)
at android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:401)
at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:522)
at android.webkit.WebViewDatabaseClassic.initDatabase(WebViewDatabaseClassic.java:165)
at android.webkit.WebViewDatabaseClassic.init(WebViewDatabaseClassic.java:130)
at android.webkit.WebViewDatabaseClassic.access$000(WebViewDatabaseClassic.java:35)
at android.webkit.WebViewDatabaseClassic$1.run(WebViewDatabaseClassic.java:109)

还有一个:

android.database.sqlite.SQLiteException: no such table: formurl: , while compiling: SELECT _id FROM formurl WHERE (url == ?)
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:127)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:53)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1686)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1571)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1527)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1607)
at android.webkit.WebViewDatabase.getFormData(WebViewDatabase.java:1212)
at android.webkit.WebView$RequestFormData.run(WebView.java:7764)
at java.lang.Thread.run(Thread.java:856)

我在我的一个屏幕中使用WebView。以下是我的网页设置:

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setSavePassword(false);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.getSettings().setUseWideViewPort(false);
        webView.getSettings().setBuiltInZoomControls(true);

        webView.clearCache(true);
        deleteDatabase("webview.db");
        deleteDatabase("webviewCache.db");

我将WebChromeClient和WebViewClient设置为:

      webView.setWebChromeClient(new WebChromeClient() {

        @Override
        public boolean onJsAlert(WebView view, String url, String message,
                JsResult result) {
            return super.onJsAlert(view, url, message, result);
        }

        @Override
        public boolean onJsPrompt(WebView view, String url, String message,
                String defaultValue, JsPromptResult result) {
            return super.onJsPrompt(view, url, message, defaultValue,
                    result);
        }

    });

    webView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {

            //My code to show progress bar

        }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        view.loadUrl(url);
        return true;


    }
    @Override
    public void onPageFinished(WebView view, String url) {
           //My code to hide progress bar


    }
    @Override
    public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {


    }

});

可能是什么问题?

2 个答案:

答案 0 :(得分:0)

尝试设置此内容并查看

mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setDatabaseEnabled(true);
mWebView.getSettings().setDatabasePath("/data/data/pkgname/databases/");

请阅读此处了解更多信息 http://developer.android.com/reference/android/webkit/WebSettings.html

答案 1 :(得分:0)

你就是这样做的 -

context.deleteDatabase("webview.db");
context.deleteDatabase("webviewCache.db");
webView.clearCache(true);

并且您知道如何获取活动的上下文。

PS - 您可能只想使用webview.clearCache(true);检查您的应用
因为我认为它会自动删除webView.db/webviewCache.db。所以在webView.clearCache(true);之后不需要