我一直致力于一个从网络缓存图像的应用程序,即使在用户离线时也会显示它。在Android 4.4问世之前,这种方法运行良好。现在,我看到的只是一个“无法加载网页”错误。我想它可能需要做一些事情,Kitkat使用Chromium来加载webview,但我不太确定。对此有何修复?
这是我的代码:
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
mWebView.setWebViewClient(new MyWebViewClient());
mWebViewSettings = mWebView.getSettings();
mWebViewSettings.setJavaScriptEnabled(true);
mWebViewSettings.setAllowFileAccess(true);
mWebViewSettings.setAppCacheEnabled(true);
if (Build.VERSION.SDK_INT < 18)
mWebViewSettings.setAppCacheMaxSize(5 * 1024 * 1024); // 5MB
mWebViewSettings.setLoadsImagesAutomatically(true);
mWebViewSettings.setAppCachePath(getActivity().getApplicationContext()
.getCacheDir().getAbsolutePath());
mWebViewSettings.setBuiltInZoomControls(true);
if(Build.VERSION.SDK_INT<=18)
mWebViewSettings.setDefaultZoom((WebSettings.ZoomDensity.FAR));
mWebViewSettings.setUseWideViewPort(true);
mWebViewSettings.setLoadWithOverviewMode(true);
我使用以下代码加载它:
if (NetworkUtil.IS_ONLINE_WITH_DATA_CONNECTION) {
MyPrefs = getActivity().getSharedPreferences(
"AHSelectionPreffs",
Context.MODE_PRIVATE);
Date CAMPUS_MAP_LAST_UPDATE_DATE = new Date();
String CAMPUS_MAP_LAST_UPDATE_DATE_STRING = MyPrefs
.getString("CAMPUS_MAP" + String.valueOf(StorageHelper.ID), null);
SimpleDateFormat simpleDateFormatter = new SimpleDateFormat(
"EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
if (CAMPUS_MAP_LAST_UPDATE_DATE_STRING != null) {
try {
CAMPUS_MAP_LAST_UPDATE_DATE = simpleDateFormatter
.parse(CAMPUS_MAP_LAST_UPDATE_DATE_STRING);
} catch (ParseException e1) {
e1.printStackTrace();
System.out.println("Cant format date!!!!");
}
int n = (int) ((curDate.getTime() - CAMPUS_MAP_LAST_UPDATE_DATE
.getTime()) / (1000 * 60 * 60));
if (n < 24 * UPDATE_DURATION_IN_DAYS) {
mWebView.getSettings().setCacheMode(
WebSettings.LOAD_CACHE_ELSE_NETWORK);
} else {
updateCampusMapData();
}
} else {
updateCampusMapData();
}
} else {
mWebView.getSettings().setCacheMode(
WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
if (StorageHelper.campus_map_link.Mobile_Link_URL != null) {
mWebView.loadUrl(StorageHelper.campus_map_link.Mobile_Link_URL);
}
private void updateCampusMapData() {
mWebView.getSettings().setCacheMode(
WebSettings.LOAD_NO_CACHE);
MyPrefs = getActivity().getSharedPreferences(
"AHSelectionPreffs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = MyPrefs.edit();
editor.putString("CAMPUS_MAP" + String.valueOf(StorageHelper.ID),
curDate.toString());
editor.commit();
}
答案 0 :(得分:3)
让自己解决了。我发现Chromium没有缓存大小超过1 MB的图像。在其他情况下,它完全正常。目前已向谷歌报告此事。
答案 1 :(得分:0)
是的,这是因为以下问题:
http://code.google.com/p/android/issues/detail?id=63501 (需要重新开启!cc Rahulrit)
http://code.google.com/p/chromium/issues/detail?id=240043
一些黑客:
1&gt;如果您使用自己的服务器,请更改MultipartCache的网络服务器实施,以便图像将按部分存储,这不是正确的解决方案试一试!
2&gt;另一种解决方案是将所有HTML文件保存在存储空间中,如this(不推荐)
// saving page from web to file
File file = new File(this.getExternalFilesDir(null), "fileName.html");
FileUtils.copyURLToFile(new URL("http://www.bmimobile.co.uk/why-bmi.php"), file);
// loading saved file in webview
webview.loadUrl("file://" + file.getPath());
信用:Nazar Merza
注意:所有这些解决方案都不是100%解决上述问题!我们可以将此作为临时修复!