Android WebView、SQLite、およびターゲット デバイスに問題があります。物理デバイスでは、データベースにアクセスできません (最後のエラーを参照)。
ウェブビューのセットアップ:
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDatabasePath("/data/data/de.sqlite.webview/databases");
メソッドでwebview を定義しonCreate
、更新クォータを見積もりの 2 倍または 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( ... )
}
エミュレーターと Chrome ではすべて正常に動作しますが、アプリを galaxys2 にデプロイすると、エラーが発生します: openDatabase is not defined。
次の html コードは、クロムおよびエミュレートされた Web ビューで機能します。
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'