检查 Android WebView 中的 URL 是否已被缓存

11

我使用webview来加载HTML页面和URL。

我希望在网络可用或者URL内容被Web视图缓存的情况下才加载URL。

如何检查URL是否被缓存,而不需要创建自己的缓存路径。

   WebSettings ws = wv.getSettings();                                                                             
   ws.setJavaScriptEnabled(true);                                                                                 
   ws.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);                                                          
     wv.setOnTouchListener(this);                                                                                 
   wv.setWebViewClient(new WebViewClient() {                                                                      
       @Override                                                                                                  
       public boolean shouldOverrideUrlLoading(WebView view, String url) {                                        
           if (!url.contains("http")) {                                                                           
               view.loadUrl(url);                                                                                 
           } else {                                                                                               
               if (Utils.isConnectingToInternet(thisActivity)) {                                                  
                   view.loadUrl(url);                                                                             

               }                                                                                                  
           }                                                                                                      
           view.loadUrl(url);                                                                                     
           return false;                                                                                          
       } 

我已经参考了以下内容:

WebView 缓存数据目录?

如何检查 WebView 缓存中的文件是否已经存在(Android)

如何将 WebView 缓存移动到 SD 卡上?

Android WebView 检查页面是否在缓存中


你是如何解决它的? - Akshatha S R
3个回答

1

设置WebView缓存模式为LOAD_CACHE_ELSE_NETWORK。

重写WebViewClient方法:

@SuppressWarnings("deprecation")
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            if (view.getUrl().equals(failingUrl)){
                showInternetConnectionError();
            }
            super.onReceivedError(view, errorCode, description, failingUrl);
        }

        @TargetApi(android.os.Build.VERSION_CODES.M)
        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            onReceivedError(view, error.getErrorCode(), error.getDescription().toString(), request.getUrl().toString());
        }

如果有互联网连接,它将从服务器加载网页,否则从缓存加载。如果网页在缓存中不可用,则会显示互联网连接错误。

0

使用 Kotlin 编写的 @vidha 的答案的工作版本,而不使用已弃用的 API:

override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) {
        if (request.url.toString() == view.url) {
             // showInternetConnectionError()
             webView.loadUrl("file:///android_asset/error_state.html")
        }
        super.onReceivedError(view, request, error)
}

0
尝试在您的webviewclient中覆盖onPageCommitVisible。当URL未被缓存且网络不可用时,将会调用此回调函数。
@Override
public void onPageCommitVisible(WebView view, String url) {
                super.onPageCommitVisible(view, url);
                if(!isNetworkAvailable){
                    //page not cached
                }
                Timber.d("Page cannot draw")
}

检查互联网可用性

boolean isNetworkAvailable(){
      ConnectivityManager cm =
        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

      NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
      boolean isConnected = activeNetwork != null &&
                      activeNetwork.isConnectedOrConnecting();
      return isConnected;

}

可用的互联网已经被缓存,那么使用了哪个回调函数? - Baris LaPaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接