原因:
webview加载 服务端的网页,为了减少访问压力,用html5缓存技术,本地建了数据库,在手机浏览器里 可以显示页面,换成webView就不行了。
解决范例:
Activity code:
HTML5 page source code:
其他设置还有:
settings.setCacheMode(WebSettings.LOAD_DEFAULT); // 默认使用缓存
settings.setAppCacheMaxSize(8*1024*1024); //缓存最多可以有8M
settings.setAllowFileAccess(true); // 可以读取文件缓存(manifest生效)
in WebChromeClient :
or:
按照范例,我成功的解决了我的问题,而且之前弹出框所出现的找不到数据(提示:underfine)也解决了,这个应该是当初数据库没设所引起的。
http://www.eoeandroid.com/thread-239818-1-1.html
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