1

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'
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" を使用して両方の Web ビューがあり、2 番目の Web ビューが画面の外に押し出されます。

linearlayout xml に追加android:orientation="vertical"し、l_webview を に変更する必要がありandroid:layout_height="0dp" android:layout_weight="1"ます。これにより、l_webview は、他のスペースが配置された後に残りのすべてのスペースを占有します。

これで問題が解決するかどうかはわかりませんが、どちらか一方を画面から押し出すことなく、両方のビューを表示できるようになります。

また、個別のビューの ID を取得するには、findViewById を使用する必要があります。

于 2012-05-14T16:01:08.653 に答える