75

私は実際にはJavaでのプログラミングは初めてですが、ここで私の問題に対するいくつかの解決策をたどっていますが、自分のケースに合った解決策が見つからず、コードを正しく取得できないようです.

電話がオンラインのときにオンライン ページ (Google など)をWebView開き、電話がオフラインのときにローカルの HTML ページを開く が必要です。

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

これをどのように行うことができるかについてのアイデアはありますか? 正しい方向を指す簡単な方法が役立つ場合があります。

どうもありがとう。

4

2 に答える 2

132

それは私には単純なWebビューキャッシングメカニズムのように聞こえます。

以下はあなたが探していることをするはずです:

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();
}

最後に、次の3つの権限を追加することを忘れないでください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"/>
于 2013-02-03T09:53:07.260 に答える
23

WebView をネイティブにキャッシュできない場合があります。ページ ヘッダーに次のフィールドが含まれている場合、WebView はそのページのコンテンツをキャッシュできません。Cache-Control: no-store、no-cache プラグマ: no-cache

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

于 2013-05-23T18:53:44.813 に答える