2016-11-16 6 views
0

私はwebviewを使用するAndroidアプリを持っています。すべてのフロントエンドファイルを処理し、apache tomcatよりキャッシュマニフェストを構築するJavaバックエンドサーバーがあります。サーバーに接続していないときにAndroid webviewのアプリキャッシュから読み込み

私の問題は、サーバーが接続されていないときにアプリケーションキャッシュから読み込むようにwebviewを取得する方法がわかりませんが、デバイスがインターネットに接続されていることです。私はアプリのコードに行けば

することは、私は、だから私は私のファイルが適切にキャッシュされている知っている

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

で使用するキャッシュを、それを強制することができます。私はまた、私はネットワークの状態を確認し、このようなネットワークの状態に基づいてキャッシュモードを設定していた他のスタックオーバーフローの問題から解決策を試してみました:

 cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE); 
    if(cm.getActiveNetworkInfo().isConnected()) .... 

しかし、このようなケースでは動作しません。デバイスはオンラインですが、サーバーがダウンしています。この場合、ネットワークは問題なく、キャッシュからロードされません。

フロントエンドのWebViewがネットワーク上のリソースにアクセスしようとしたときに利用できない場合は、キャッシュからロードするだけです。これは通常のブラウザで正しく動作します。しかし、私は、特定のサーバーへのネットワーク接続を検出し、キャッシュモードを変更するなどの回避策を受け入れることができます。

誰もがこの問題の最善の方法を知っていますか?ありがとう。

答えて

1

あなたがそれを伝えない限り、アンドロイドはHTML5のアプリケーションキャッシュをまったく使用していないように見えましたが、これは本当に私の考えを捨てていました。私は次のコードを使用して解決しました:

final WebSettings webviewSettings = webView.getSettings(); 
final String appCachePath = this.getCacheDir().getAbsolutePath(); 
webviewSettings.setDomStorageEnabled(true); 
webviewSettings.setAppCachePath(appCachePath); 
webviewSettings.setAllowFileAccess(true); 
webviewSettings.setAppCacheEnabled(true); 
webviewSettings.setCacheMode(WebSettings.LOAD_DEFAULT); 

次に、私はどのようにアプリケーションキャッシュが動作すると予想されたのか動作しました。つまり、キャッシュマニフェストのCACHEセクションで指定されているように、ネットワーク経由でロードできない場合は、キャッシュからリソースをロードします。

+0

ソリューションを共有していただきありがとうございます。 – jakogut

関連する問題