11

私のWebViewでは、ヘッダーに複数のリンクがあります。オフラインモードでは、ページの再読み込みを許可せず、そのページをそのままにしてから、インターネット接続についてユーザーに通知する必要があります。他のリンクをクリックすると、ロードする前にリンクをキャッチできshouldOverrideUrlLoadingます。しかし、同じリンクをクリックすると、shouldOverrideUrlLoading起動されません。代わりに、onLoadResourceメソッドが最初に呼び出されます。その方法で試しwebView.stopLoading();ましたが、動作を継続し、onReceivedErrorメソッドを起動し、ページにエラーレポートを表示します。

これが私のWebClientです。

webView.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if(MyApplication.getInstance().isOnline()) {
                return false;
            }

            Toast.makeText(getApplicationContext(), "Please check Internet connection and try again.", Toast.LENGTH_SHORT).show();
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            Log.i("ON_PAGE_START", "RUNNING ============>" + url);
            if (MyApplication.getInstance().isOnline()) {
                super.onPageStarted(view, url, favicon);
            } else {
                webView.stopLoading();
            }
        }

        @Override
        public void onLoadResource(WebView view, String url) { 

            if (MyApplication.getInstance().isOnline()) {
                super.onLoadResource(view, url);
            } else {
                webView.stopLoading();                  
            }
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {               

            view.stopLoading();

            Toast.makeText(getApplicationContext(), "Please check Internet connection and try again.", Toast.LENGTH_SHORT).show();
            super.onReceivedError(view, errorCode, description, failingUrl);    
        }
    });

私が望んでいるのは、オフラインの場合にURLが起動されないようにして、そのことを通知できるようにすることです。

4

3 に答える 3

5

これは既知の問題であり、バグが報告されています。 http://code.google.com/p/android/issues/detail?id=2887

いくつかの回避策が提案されています。例えば

  1. onPageStartedをオーバーライドする
  2. CommonsWareによるJavascriptInterfaceの追加
  3. WebViewタッチイベントを無効にする

さらに、BroadcastReceiverを登録して、ネットワーク状態の変化をリッスンし、接続が失われたときに回避策を適用します。 ネットワークリスナーAndroid

于 2013-03-29T14:13:29.567 に答える
4

onLoadRessource(..)とonPageStarted()では、さらに

view.stopLoading();

あなたの他の{..}

于 2016-07-03T09:04:50.730 に答える
1

私はそのかなり古い投稿を知っていますが、この投稿に感謝します、これは私が問題を解決するのを助けました!!!

同様の問題があり、stopLoadingで問題が解決しました:)

shouldOverrideUrlLoadingは、新しいページに移動した場合、またはリダイレクトがあるが、iframeをクリックするなどの場合とは異なり、呼び出されます。アプリで同様の動作を実現したかったのですが、onPageStartedが呼び出されましたが、shouldOverrideUrlLoadingは呼び出されませんでした。

onLoadResourceはonPageStartedの後に呼び出されるため、onLoadResourceをオーバーライドしませんでしたが、onPageStartedだけをオーバーライドしました。OnPageStartedは、オフラインかどうかをチェックし、その場合はロードしません。これが誰かに役立つことを願っています。

于 2015-04-29T08:14:08.623 に答える