我想在未连接互联网时从缓存加载网站。以下是我在onCreate中设置webview的方法:
browse.getSettings().setJavaScriptEnabled(true);
browse.getSettings().setPluginsEnabled(true);
browse.getSettings().setLoadWithOverviewMode(true);
browse.getSettings().setUseWideViewPort(true);
browse.getSettings().setBuiltInZoomControls(true);
browse.getSettings().setSupportZoom(true);
browse.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
browse.setScrollbarFadingEnabled(true);
browse.getSettings().setLoadsImagesAutomatically(true);
browse.getSettings().setAppCacheMaxSize(1024 * 1024 * 100);
browse.getSettings().setAppCacheEnabled(true);
if (cm.getActiveNetworkInfo().isConnected())
browse.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
else
browse.getSettings().setCacheMode(
WebSettings.LOAD_CACHE_ELSE_NETWORK);
browse.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
t.setVisibility(TextView.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
t.setVisibility(TextView.GONE);
}
});
try {
browse.loadUrl(address);
} catch (Exception e) {
e.printStackTrace();
}
这是我正在关注的tutorial,即使重新启动浏览器,我也会尝试加载以前访问过的网页。不行!请帮我。
P.S:我搜索了SO上的所有相关代码,但都没有。
答案 0 :(得分:5)
在清单文件中声明以下权限:
android.permission.ACCESS_NETWORK_STATE
答案 1 :(得分:1)
我认为您错过了对WebSettings.setAppCacheEnabled(true)
的调用:)
另外,我认为最好先检查连接情况,然后在致电setCacheMode()
之前致电loadUrl()
,而不是在onPageStarted()
方法内(似乎为时已晚)。
最后,我不确定是否需要覆盖getCacheDir()
,因为我认为您只是在覆盖中调用默认实现。
<强>更新强>
在查看问题中的更新代码后,我可以确认我有类似的代码,工作正常。唯一值得注意的区别是我在检查连接时有以下代码:
final NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
} else {
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
与您的版本相比:
if (cm.getActiveNetworkInfo().isConnected())
browse.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
else
browse.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
我通过在模拟器中运行并打开和关闭飞机模式进行测试。
但是,我确实阅读了您更密切联系的教程(我现在明白为什么要覆盖原始代码中的getCacheDir()
)并且想知道您是否仍在WebView.clearCache(true)
中调用onDestroy()
1}你的活动。如果您仍然没有修改教程中的那部分,那肯定会导致缓存看起来不起作用:)
答案 2 :(得分:1)
您是否尝试过nanoHttpd网络服务器,这是获取SD卡或本地内存访问网页的简单解决方案..您要做的就是提供页面路径,http:// localhost:8081 / [您的缓存直接路径到webview中的离线网页
https://gist.github.com/1893396
我在sdcard和手机内存的页面上试过这个,希望这对你有用