2016-06-19 7 views
0

Ich habe mein Webview so eingestellt, dass jede besuchte Seite zwischengespeichert wird (solange online). Ich muss auch eine benutzerdefinierte Ansicht oben auf der Webansicht anzeigen, falls das Gerät offline geht und die Benutzer versuchen, eine Webseite zu laden, die nicht zwischengespeichert wurde.Webview onReceivedError wird auch beim Laden aus dem Cache aufgerufen

Es scheint, dass die onReceivedError() Methode der WebViewClient Klasse selbst aufgerufen wird, wenn die Seite aus dem Cache geladen wurde, und es setzt den gleichen Code-Fehler, also -2 whick offenbar ERROR_HOST_LOOKUP

bedeutet Gibt es eine Möglichkeit, um zu bestimmen Wenn die Webseite fehlgeschlagen ist und nicht aus dem Cache geladen wurde, kann ich dem Benutzer eine benutzerdefinierte Ansicht anzeigen. Und nein, ich kann das Caching nicht deaktivieren, ich muss es behalten.

Antwort

1

Ich musste dies kürzlich angehen und hackte herum: Ich bemerkte, dass beim Laden zwischengespeicherten Inhalt; Die onLoadResource() des WebViewClients wurde mehrfach vor onReceivedError() aufgerufen. Wenn es keinen zwischengespeicherten Inhalt gab; onLoadResource() wurde nur einmal vor onReceivedError() aufgerufen.

Ich verwendete diese Verhaltensdifferenz, um ein Flag zu setzen, das in onReceivedError() verwendet wurde, um festzustellen, ob ich meine Fehleransicht anzeigen sollte oder nicht.

Z. B:

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: DIES IST EIN HACK und wird von NO ein guter Ersatz für eine Arbeits API BEDEUTET ... aber das ist das beste, das ich ein fehlt tun konnte.