2016-06-19 36 views
0

我已将Web视图设置为缓存访问的每个页面(在线时)。我还需要在Webview的顶部显示一个自定义视图,以防设备脱机并且用户尝试加载网页并且没有被缓存。即使从缓存中加载,也会调用Webview onReceivedError

看来,即使网页已经从缓存中加载的WebViewClient类的onReceivedError()方法被调用,并将其设置相同的错误代码,即-2 whick显然意味着ERROR_HOST_LOOKUP

有没有一种方法来确定如果网页失败并且未从缓存中加载,那么我可以向用户显示自定义视图?不,我不能禁用缓存,我需要保留它。

回答

1

我不得不最近解决这个问题,并绕过它:我注意到,加载缓存的内容时;在onReceivedError()之前,WebViewClient的onLoadResource()被多次调用。当没有缓存的内容时; onLoadResource()仅在onReceivedError()之前调用一次。

我用这种行为差异来设置一个在onReceivedError()中使用的标志来确定我是否应该显示我的错误视图。

E.g:

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

编辑:这是一个黑客,绝不有关工作API很好的替代品......但是这是我所能做的缺乏一个最好的。

相关问题