Android Webview - 从Java脚本如何访问使用本机编码创建的数据库



我正在构建我的第一个Android混合应用程序 - 使用本机代码和Webview。我已经使用本机代码创建了一个SQL lite DB。下面是我构建初始函数的链接。https://www.learn2crack.com/2013/08/develop-android-login-registration-with-php-mysql.html

现在在 Web 视图中,从 java 脚本如何访问使用本机代码创建的同一数据库。

下面是代码。我尝试连接到数据库,但我不确定它是否正确连接到同一个数据库,因为当我运行查询时,我得到表不存在错误。

Java原生代码:

myWebView = (WebView) this.findViewById(R.id.webView);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    myWebView.addJavascriptInterface(this, "android");
    myWebView.requestFocusFromTouch();
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.setWebChromeClient(new WebChromeClient());
    webSettings.setAppCacheMaxSize(5*1024*1024);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setDatabaseEnabled(true);
    webSettings.setLoadsImagesAutomatically(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setLoadsImagesAutomatically(true);
    webSettings.setAppCacheEnabled(true);
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
    webSettings.setAllowFileAccess(false);
    webSettings.setUseWideViewPort(false);
    webSettings.setSupportZoom(false);
    webSettings.setSavePassword(false);
    webSettings.setSupportMultipleWindows(false);
    myWebView.setWebChromeClient(new WebChromeClient()
    {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
        }
        @Override
        public void onExceededDatabaseQuota(String url,
                                            String databaseIdentifier, long currentQuota,
                                            long estimatedSize, long totalUsedQuota,
                                            WebStorage.QuotaUpdater quotaUpdater) {
            quotaUpdater.updateQuota(5 * 1024 * 1024);
        }
    });
    myWebView.loadUrl("file:///android_asset/index.php");
    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            if (url.equals("file:///android_asset/index.php")) {
                myWebView.loadUrl("javascript:OrderView();");
            }

        }

Javascript 代码:

function OrderView(){
var myDB = window.openDatabase("mydb_db4", "1.0", "mydb",  2 * 1024 * 1024);
if(myDB != null) {
    myDB.transaction(function(tx) {
             tx.executeSql('SELECT * FROM pjp',
                     [],
                     function(tx, results)
                     {
                       for (var i=0; i<results.rows.length; i++)
                       {
                           var row=results.rows.item(i);
                           var stringout = "Category: " + row['oname'];
                           document.getElementById('mobileWraper').innerHTML = stringout;
                       }
                     },
                     globalError
                    );
         });
} else {
    document.getElementById('mobileWraper').innerHTML = "The WebView is not giving access to the Database, something isn't configured properly";
}
    return false; 
}
function globalError(tx, error)
{
  document.getElementById('mobileWraper').innerHTML = "Error: " + error.message;
}

谢谢。

你错过了这两行 -

final String databasePath = this.getApplicationContext().getDir(“database”, Context.MODE_PRIVATE).getPath();
settings.setDatabasePath(databasePath);

有关参考,请单击此处。

最新更新