2016-06-19 24 views
0

私はWebviewを訪問したすべてのページをキャッシュするように設定しました(オンライン中)。また、デバイスがオフラインになってユーザーがWebページを読み込もうとしたときにWebviewの上にカスタムビューを表示する必要があり、キャッシュされていません。キャッシュからロードする場合でもWebview onReceivedErrorが呼び出されます

決定する方法はありWebViewClientクラスのonReceivedError()方法は、ページがキャッシュからロードされている場合にも呼ばれ、それはすなわち、明らかにERROR_HOST_LOOKUP

を意味whick -2同じエラーコードを設定しているようですWebページが失敗し、キャッシュからロードされなかった場合、ユーザーにカスタム表示を表示できますか?そして、いいえ、私はキャッシングを無効にすることはできません、私はそれを保つ必要があります。

答えて

1

私は最近、この問題に取り組み、ハッキングしなければなりませんでした。キャッシュされたコンテンツを読み込むときに気づきました。 onReceivedError()の前にWebViewClientのonLoadResource()が複数回呼び出されました。キャッシュされたコンテンツがなかった場合。 onLoadResource()はonReceivedError()の前に一度だけ呼び出されました。

この動作の違いを使用して、エラービューを表示するかどうかを判断するためにonReceivedError()で使用されたフラグを設定しました。

例えば:

public class CustomWebViewClient extends WebViewClient { 
    private int onLoadResourceCount = 0; 

    @Override 
    public void onLoadResource(WebView view, String url) { 
     super.onLoadResource(view, url); 
     onLoadResourceCount++; 
    } 

    @Override 
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { 
     if (onLoadResourceCount <= 1) { 
      showErrorView(); 
     } 
    } 
} 

EDIT:これはHACKで、NOはWORKINGのAPI FOR GOOD SUBSTITUTEをされるものでは...しかし、これは私は1つを欠いているん可能性が最善です。

関連する問題