1

インターネットが接続されていないときに、キャッシュから Web サイトを読み込みたい。onCreate で webview をセットアップする方法は次のとおりです。

    browse.getSettings().setJavaScriptEnabled(true);
    browse.getSettings().setPluginsEnabled(true);
    browse.getSettings().setLoadWithOverviewMode(true);
    browse.getSettings().setUseWideViewPort(true);
    browse.getSettings().setBuiltInZoomControls(true);
    browse.getSettings().setSupportZoom(true);
    browse.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    browse.setScrollbarFadingEnabled(true);
    browse.getSettings().setLoadsImagesAutomatically(true);
    browse.getSettings().setAppCacheMaxSize(1024 * 1024 * 100);
    browse.getSettings().setAppCacheEnabled(true);

    if (cm.getActiveNetworkInfo().isConnected())
        browse.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
    else
        browse.getSettings().setCacheMode(
                WebSettings.LOAD_CACHE_ELSE_NETWORK);

    browse.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
            t.setVisibility(TextView.VISIBLE);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            t.setVisibility(TextView.GONE);
        }
    });

    try {
        browse.loadUrl(address);
    } catch (Exception e) {
        e.printStackTrace();
    }

私がフォローしているチュートリアルは次のとおりです。ブラウザーを再起動しても、以前にアクセスした Web ページを読み込もうとしています。うまくいきません!私を助けてください。

PS: SO で関連するすべてのコードを検索しましたが、どれも機能しません。

4

3 に答える 3

5

マニフェスト ファイルで次のアクセス許可を宣言します。

android.permission.ACCESS_NETWORK_STATE
于 2012-08-16T20:08:19.747 に答える
1

nanoHttpd ウェブサーバーを試してみましたか?SD カードまたはローカル メモリ内のウェブページにアクセスするための簡単なソリューションです。ウェブビューで

https://gist.github.com/1893396

SDカードと電話のメモリのページでこれを試しました。これがうまくいくことを願っています

于 2012-08-23T06:55:07.420 に答える
1

私はあなたがへの呼び出しを逃していると思いますWebSettings.setAppCacheEnabled(true):)

また、メソッド内から呼び出すのではなく、接続を確認して呼び出すsetCacheMode()前に呼び出した方が良いと思います(手遅れのようです)。loadUrl()onPageStarted()

getCacheDir()最後に、オーバーライドでとにかくデフォルトの実装を呼び出しているだけだと思う​​ので、オーバーライドが必要かどうかはわかりません。

アップデート:

質問の更新されたコードを見た後、正常に機能する同様のコードがあることを確認できます。唯一の注目すべき違いは、接続を確認するときに次のコードがあることです。

    final NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
    if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
        settings.setCacheMode(WebSettings.LOAD_DEFAULT);
    } else {
        settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    }

あなたのバージョンと比較して:

    if (cm.getActiveNetworkInfo().isConnected())
        browse.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
    else
        browse.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

エミュレーターで実行し、機内モードのオンとオフを切り替えてテストしました。

getCacheDir()しかし、私はあなたがより密接にリンクしたチュートリアルを読みました (そして、元のコードでオーバーライドする理由を今理解WebView.clearCache(true)しました) onDestroy()。チュートリアルのその部分がまだ変更されていない場合、キャッシュが機能していないように見えます:)

于 2012-08-20T02:03:22.943 に答える