机器人的WebView HTML5访问数据库的问题 [英] android WebView HTML5 access database problem

查看:210
本文介绍了机器人的WebView HTML5访问数据库的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是工作在一个应用程序 其中嵌入的WebView,并显示一个HTML5页面。

在Android的Chrome浏览器浏览器。数据库中的HTML页面创建正常打开的时候。

但是当我运行这个应用程序,数据库不能创建。 它似乎是HTML网页不能创建的WebView数据库。

有人知道为什么?

这是我的活动code:

 公共类efan_NewsReader延伸活动{
/ **第一次创建活动时调用。 * /
@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);
    的WebView myWebView =(web视图)findViewById(R.id.my_webview);
    myWebView.setWebViewClient(新WebViewClient());
    WebSettings设置= myWebView.getSettings();
    settings.setJavaScriptEnabled(真正的);
    settings.setDomStorageEnabled(真正的);
    settings.setDatabaseEnabled(真正的);
    settings.setAppCacheEnabled(假);

    myWebView.loadUrl(http://10.10.35.47:8080/html5test/test.htm);

}}
 

这是我的HTML5网页源代码code:

 < HTML清单=mymanifest.manifest>
    < HEAD>
< META HTTP-当量=Content-Type的CONTENT =text / html的;内容=无缓存的charset = UTF-8/>
<脚本类型=文/ JavaScript的SRC =JS / jQuery的-1.6.1.min.js>< / SCRIPT>

<脚本>
$(文件)。就绪(函数(){

    databaseTest();
});

传播databaseTest(){


    //打开数据库
     变种DB =的openDatabase('MYDB','1.0','测试数据库',2 * 1024 * 1024);

      db.transaction(函数(德克萨斯州){
      tx.executeSql(CREATE TABLE IF NOT EXISTS testHtml(ID唯一,contentText)');
      tx.executeSql(INSERT INTO testHtml(contentText)VALUES(插入数据的考验!));
       });

     db.transaction(函数(德克萨斯州){
     tx.executeSql(SELECT * FROM testHtml',[],功能(德克萨斯州,结果){
            VAR的len = result.rows.length;
            VAR味精=< P>找到行:+ LEN +< / P>中;
             $(#testinfo)追加(MSG);
        },空值);
     });


}

< / SCRIPT>


< /头>
<身体GT;
    < D​​IV>此处是测试信息:< / DIV>
    < D​​IV ID =testinfo>< / DIV>
< /身体GT;
 

解决方案

尝试:

  settings.setDatabaseEnabled(真正的);
字符串DBPATH = this.getApplicationContext()GETDIR(数据库,Context.MODE_PRIVATE).getPath()。
settings.setDatabasePath(DBPATH);
 

而在WebChromeClient:

  myWebView.setWebChromeClient(新WebChromeClient()
{
    @覆盖
    公共无效onExceededDatabaseQuota(URL字符串,字符串databaseIdentifier,长currentQuota,长estimatedSize,长tot​​alUsedQuota,WebStorage.QuotaUpdater quotaUpdater)
    {
        quotaUpdater.updateQuota(estimatedSize * 2);
    }
}
 

这应该没问题;)

i am work at an app which Embed an WebView and display a HTML5 page .

when open the html page in android chrome Browser.the database was create normal.

but when i run this app , the database can not create . it seem that html page can not create the database on WebView.

anybody know why?

here is my Activity code:

 public class efan_NewsReader extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        
    WebView myWebView=(WebView)findViewById(R.id.my_webview);
    myWebView.setWebViewClient(new WebViewClient());
    WebSettings settings = myWebView.getSettings();  
    settings.setJavaScriptEnabled(true);
    settings.setDomStorageEnabled(true);
    settings.setDatabaseEnabled(true);
    settings.setAppCacheEnabled(false);        

    myWebView.loadUrl("http://10.10.35.47:8080/html5test/test.htm");

}}

here is my HTML5 page source code:

    <html manifest="mymanifest.manifest">
    <head>
<meta http-equiv="Content-Type" content="text/html; content="no-cache" charset=utf-8" />
<script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>

<script>
$(document).ready(function(){       

    databaseTest();
});

function databaseTest(){


    //open database
     var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);  

      db.transaction(function (tx) {            
      tx.executeSql('CREATE TABLE IF NOT EXISTS testHtml (id unique, contentText)');
      tx.executeSql('INSERT INTO testHtml (contentText) VALUES ("insert data test!")');  
       });  

     db.transaction(function(tx){           
     tx.executeSql('SELECT * FROM testHtml',[],function(tx,result){
            var len=result.rows.length;
            var msg = "<p>Found rows: " + len + "</p>";  
             $("#testinfo").append(msg);
        },null);
     });    


}

</script>


</head>
<body>
    <div>here is test info:</div>
    <div id="testinfo"></div>
</body>

解决方案

Try :

settings.setDatabaseEnabled(true);
String dbPath = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
settings.setDatabasePath(dbPath);

And in WebChromeClient :

myWebView.setWebChromeClient(new WebChromeClient()
{
    @Override
    public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater)
    {
        quotaUpdater.updateQuota(estimatedSize * 2);
    }
}

It should be OK ;)

这篇关于机器人的WebView HTML5访问数据库的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆