我正在编写一个演示应用程序,以查看是否可以在本机android和Web视图之间共享数据库。为此,我在我的活动中添加了一个webview和一个按钮。单击按钮,我在/data/data/com.demo/databases/testdb中创建一个数据库。我可以在sqlite3提示符下看到这个数据库。然后我写了一个html页面,在头部
中有以下脚本标记<script type="text/javascript">
if (window.openDatabase){
db = window.openDatabase("testdb", "1", "test database", 1024*1024);
alert("Database " + db);
if(db){
db.transaction(function(tx)
{
tx.executeSql('SELECT * FROM KeyValues',
[],
function (tx, rs) { displayMyResult(rs); },
function (tx, err) { displayMyError(err); } );
});
}
}else{
alert("Database is not supported");
}
function displayMyResult(rs){
alert("In display method");
for(var i=0; i < rs.rows.length; i++) {
r = rs.rows.item(i);
alert('id = ' + r['id'] + ', Key: ' + r['key_name'] + ', Value: ' + r['key_value']);
}
}
function displayMyError(err){
alert(err.message);
}
</script>
问题是我总是将数据库对象db作为null。可能这是不可能的。或者我错过了什么。
感谢任何帮助。
编辑:底线:是否可以访问由webview中的原生android API创建的数据库?
答案 0 :(得分:0)
您是否尝试过阅读此帖How do I call window.openDatabase from a webView hosted in an android application?
你需要做
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
...
settings.setDatabaseEnabled(true);
settings.setDatabasePath("/data/data/your.package.name/database_name");