我實際上是Java編程的新手,但我一直在解決我的問題的幾個解決方案,但沒有找到一個適合我的案例,我似乎無法正確地取下代碼。WebView在線時加載網站,在離線時加載本地文件
我希望有一個WebView
,當手機處於聯機狀態時打開在線頁面(例如Google),並在手機處於脫機狀態時打開本地HTML頁面。
同時,雖然我希望手機在聯機時覆蓋本地頁面,以便離線本地頁面始終更新到最後一次手機連接到互聯網。
任何想法如何做到這一點? 一些簡單的指向正確的方向可能會有所幫助。
非常感謝。
我實際上是Java編程的新手,但我一直在解決我的問題的幾個解決方案,但沒有找到一個適合我的案例,我似乎無法正確地取下代碼。WebView在線時加載網站,在離線時加載本地文件
我希望有一個WebView
,當手機處於聯機狀態時打開在線頁面(例如Google),並在手機處於脫機狀態時打開本地HTML頁面。
同時,雖然我希望手機在聯機時覆蓋本地頁面,以便離線本地頁面始終更新到最後一次手機連接到互聯網。
任何想法如何做到這一點? 一些簡單的指向正確的方向可能會有所幫助。
非常感謝。
這聽起來像一個簡單的webview緩存機制給我。
以下應該做你在找什麼:
WebView webView = new WebView(context);
webView.getSettings().setAppCacheMaxSize(5 * 1024 * 1024); // 5MB
webView.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath());
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // load online by default
if (!isNetworkAvailable()) { // loading offline
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
webView.loadUrl("http://www.google.com");
的方法isNetworkAvailable()
檢查活動的網絡連接:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
最後,不要忘了添加以下三種權限AndroidManifest.xml
:
<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"/>
h有時候WebView不能被本地緩存。如果頁眉包含以下字段,則WebView將無法緩存該頁面中的內容。緩存控制:無存儲,無緩存Pragma:無緩存
在這種情況下,您將不得不修改服務器上的頁面屬性來解決緩存問題。
這是真的完整..作品像一個魅力!非常感謝你給我看緩存模式 – mstation
不用擔心,很高興幫助:) – jenzz
@jenzz:我的解決方案有兩個問題。首先,就我而言,緩存目錄(外部SD卡)中出現的所有內容都是名爲ApplicationCache.db的* empty *文件。不應該更大?也許緩存存儲在其他地方?其次,'.setAppCacheMaxSize()'東西在API18中已棄用,不確定如何添加更多的chache然後... –