我正在构建我的第一个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);
有关参考,请单击此处。