2011-03-01 42 views
0

我正在编写一个演示应用程序,以查看是否可以在原生android和web视图之间共享数据库。为此,我为我的活动添加了一个webview和一个按钮。点击按钮,我在/data/data/com.demo/databases/testdb中创建一个数据库。我可以在sqlite3提示符下看到这个数据库。然后我写了有以下脚本标签在头部分在android原生应用程序和html5之间共享数据库

<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> 

问题是我一直都想与数据库对象数据库为空HTML页面。可能这是不可能的。或者我错过了什么。

任何帮助表示赞赏。

编辑:底线:是否有可能访问由webview中的原生android API创建的数据库?

回答

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"); 
+0

这是正确的做法?我很好奇自己。 –

+0

我可以在/data/data/com.demo/databases文件夹中看到数据库testdb。但是从html页面 db = window.openDatabase(“testdb”,“1”,“test Database”,1024 * 1024);总是返回null – prashant

相关问题