webview 加载html5本地缓存以及数据库

原因:
webview加载 服务端的网页,为了减少访问压力,用html5缓存技术,本地建了数据库,在手机浏览器里  可以显示页面,换成webView就不行了。


解决范例:
Activity code:

?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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();
                // 开启javascript设置
                settings.setJavaScriptEnabled( true );  
                // 设置可以使用localStorage
                settings.setDomStorageEnabled( true );
                // 应用可以有数据库
                settings.setDatabaseEnabled( true );   
                String dbPath = this .getApplicationContest().getDir( "database" , Context.MODE_PRIVATE).getPath();
                settings.setDatabasePath(dbPath);
                // 应用可以有缓存
                settings.setAppCacheEnabled( true );             
                String appCaceDir = this .getApplicationContext().getDir( "cache" , Context.MODE_PRIVATE).getPath();
                settings.setAppCachePath(appCaceDir);
                  
                myWebView.loadUrl( "http://10.10.35.47:8080/html5test/test.htm" );
        }
}

HTML5 page source code:
?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    < 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 >




其他设置还有:
settings.setCacheMode(WebSettings.LOAD_DEFAULT);   // 默认使用缓存
settings.setAppCacheMaxSize(8*1024*1024);   //缓存最多可以有8M
settings.setAllowFileAccess(true);   // 可以读取文件缓存(manifest生效)


in WebChromeClient :
?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
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 );    
        }
}


or:
?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
myWebView.setWebChromeClient( new WebChromeClient()
{
    // 扩充缓存的容量   
        @Override    
        public void onReachedMaxAppCacheSize( long spaceNeeded, long totalUsedQuota,
                        WebStorage.QuotaUpdater quotaUpdater)    
        {        
                quotaUpdater.updateQuota(spaceNeeded * 2 );
    }
}




按照范例,我成功的解决了我的问题,而且之前弹出框所出现的找不到数据(提示:underfine)也解决了,这个应该是当初数据库没设所引起的。

http://www.eoeandroid.com/thread-239818-1-1.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值