如果没有连接,Android WebView不会加载caching的网站

我试图cachingWebView中加载的网站,但如果networking连接closures,我不能得到它的工作。

Cachdirectory被创build,caching文件在那里。 权限被给出。 我加载网页,然后closuresnetworking(WI-FI的权限也给出),我得到错误,因为我正在尝试重新加载页面(现在它应该从caching中加载)。 帮助!

这里是代码:

WebView engine=(WebView)findViewById(R.id.web_engine); engine.getSettings().setJavaScriptEnabled(true); engine.getSettings().setBuiltInZoomControls(true); engine.getSettings().setLoadsImagesAutomatically(true); engine.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); engine.setInitialScale(1); engine.setWebViewClient(new WebViewClient()); engine.setWebChromeClient(new WebChromeClient() { @Override public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota,QuotaUpdater quotaUpdater) { quotaUpdater.updateQuota(spaceNeeded * 2); } public void onProgressChanged(WebView view, int progress) { activity.setTitle("Loading..."); activity.setProgress(progress * 100); if(progress == 100) { activity.setTitle(R.string.app_name); } } }); String appCachePath; engine.getSettings().setDomStorageEnabled(true); // Set cache size to 8 mb by default. should be more than enough engine.getSettings().setAppCacheMaxSize(1024*1024*8); appCachePath = getApplicationContext().getCacheDir().getAbsolutePath(); engine.getSettings().setAppCachePath(appCachePath); engine.getSettings().setAllowFileAccess(true); engine.getSettings().setAppCacheEnabled(true); engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE); if(cm.getActiveNetworkInfo() == null || !cm.getActiveNetworkInfo().isConnected()) { appCachePath = getApplicationContext().getCacheDir().getAbsolutePath(); engine.getSettings().setAppCachePath(appCachePath); engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); engine.loadUrl("http://www.google.com"); } else { System.err.println("CACHE OR NETWROK"); engine.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); engine.loadUrl("http://www.google.com"); } }` 

和权限:

 `<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />` 

谢谢您的进步!

Solutions Collecting From Web of "如果没有连接,Android WebView不会加载caching的网站"

你的使用

 engine.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 

正在告诉WebView从caching中加载页面,但是如果它需要任何不在caching中的东西,它会向networking发送,而当你没有连接的时候,它只会给你“页面无法加载的错误“。 这是因为可悲的是,并不是所有东西都存储在caching中,即使使用这个设置,您也会注意到浏览器正在使用networking。

让WebView忽略无连接的唯一方法是使用

 engine.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY); 

设置。 一些图像不会加载这个设置(因为它们没有被caching),但是它仍然会加载它在caching中find的所有东西。


与您的问题无关的另一个注意事项是,在您的代码中,您已经使用了setAppCacheMaxSize,并且已经在API 18及更高版本中被弃用,因为WebView自己pipe理caching大小,所以只是提醒一下。