2013-02-03 6 views
58

私は実際にJavaでプログラミングするのは初めてですが、私の問題にはいくつかの解決策を追ってきましたが、コードを正しく取得してください。WebViewがオンラインのときにウェブサイトをロードする、オフラインのときにローカルファイルをロードする

携帯電話がオンラインのときにオンラインページ(たとえばGoogle)を開き、電話がオフラインのときにローカルHTMLページを開くWebViewを持っています。

同時に、オフラインローカルページが常にインターネットに接続された最後の時刻に更新されるように、電話がオンラインのときにローカルページを上書きするようにしたいと思います。

どのようにこれを行うことができますか? 正しい方向を指す簡単な方が助けになるかもしれません。

ありがとうございます。

答えて

103

これは私にとってシンプルなwebviewキャッシング機構のようです。

以下は、あなたが探しているものを行う必要があります、最後に

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 

次の三つの権限を追加することを忘れないでください:

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()チェック〜にあなたの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"/> 
+1

これは本当に完璧です..魅力のように動作します!私にキャッシュモードを表示するためにたくさんありがとうございます – mstation

+0

心配しないで、喜んで助けました:) – jenzz

+0

@ jenzz:私はあなたの解決策に2つの問題があります。まず、私のケースでは、キャッシュディレクトリ(外部のSDカード)に表示されるのはすべて、 "ApplicationCache.db"と呼ばれる*空のファイルです。より大きくてはいけませんか?他の場所にキャッシュが格納されている可能性がありますか?次に、 '.setAppCacheMaxSize()'はAPI18では廃止されましたが、もっと多くのchacheを追加する方法は不明です。 –

16

h WebViewをネイティブにキャッシュできない場合があります。ページヘッダーに次のフィールドが含まれている場合、WebViewはそのページから内容をキャッシュすることができません。キャッシュ制御:no-store、no-cacheプラグマ:no-cache

この場合、キャッシングの問題を解決するには、サーバーのページプロパティを変更する必要があります。

関連する問題