1

我在使用 android webview、SQLite 和我的目标设备时遇到了一些问题。在物理设备上,无法访问数据库(请参阅最后的错误)。

webview的设置:

    settings.setJavaScriptEnabled(true);
    settings.setDatabaseEnabled(true);
    settings.setDatabasePath("/data/data/de.sqlite.webview/databases"); 

我在onCreate方法中定义了 webview,并将更新配额设置为估计值的两倍或大于 HTML5 定义中的值。

mWebView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater)
    {
            quotaUpdater.updateQuota(204801); //estimatedSize * 2
    }
}); 


    mWebView.setWebViewClient(new WebViewClient() {                 
    @Override
    public boolean shouldOverrideUrlLoading( ... ) 
    }

在 Emulator 和 Chrome 上一切正常,但如果我将应用程序部署到我的 galaxy2 我会收到一个错误:openDatabase is not defined

以下 html 代码适用于 chrome 和模拟的 webview:

    db = new HKSQL();
    db.openSQL();
    today = getTodayDate();
    createDbTable_LastLogin();

    //HKSQL Class 
    function HkSQL(){
    this.query;
    this.result;
    this.database;
    }

    HkSQL.prototype.openSQL = function(){
    this.database = openDatabase("hkapp","1.0","HKApp","65536");    
    } 

    //an example query to create my db
    CREATE TABLE IF NOT EXISTS HK_lastlogin (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, datum TEXT NOT NULL)

我不知道为什么它在我的设备上不起作用。我考虑了读写权限,但.db文件已经创建。以下是一些我认为针对相同问题的错误消息:

Uncaught ReferenceError: openDatabase is not defined 
Uncaught TypeError: Object [object DOMWindow] has no method 'openDatabase'
4

2 回答 2

2

答案是两个Webview 都需要初始化为具有完整功能的 WebChromeClients。

myWebView = (WebView) findViewById(R.id.l_webview);

myWebView.setWebViewClient(new WebViewClient() {  });
myWebView.setWebChromeClient(new WebChromeClient() { ... } );


myWebView2 = (WebView) findViewById(R.id.l_navi);

myWebView2.setWebViewClient(new WebViewClient() {        });
myWebView2.setWebChromeClient(new WebChromeClient() { ... } );
于 2012-06-06T05:48:35.373 回答
0

那不应该dbclassname.openDatabase代替window.openDatabase吗?

编辑

这里有一个 SO 答案,我看到他们所拥有的和你所拥有的之间的唯一区别是这一行:

settings.setJavaScriptCanOpenWindowsAutomatically(true); 

尝试添加它,然后看看它是否有效。

编辑 2

您尚未设置 LinearLayout 的方向,因此它默认为水平,其中您有两个使用 layout_width="match_parent" 的 webview,这会将第二个 webview 推离屏幕。

您应该添加android:orientation="vertical"到线性布局 xml,并将 l_webview 更改为android:layout_height="0dp" android:layout_weight="1". 这将使 l_webview 在另一个就位后占用所有剩余空间。

我不知道这是否会解决您的问题,但它会使两个视图都可见,而无需将一个视图推离屏幕。

您还需要使用 findViewById 来获取每个单独视图的 id。

于 2012-05-14T16:01:08.653 回答