1. 程式人生 > >關於Android之WebView載入網頁快取和清除問題

關於Android之WebView載入網頁快取和清除問題

無獨有偶,Android開發中也需要一個網頁快取機制,自然網路上成熟的案例舉不勝舉,比如:

一、設定快取:

private static final String APP_CACAHE_DIRNAME = "/webcache";

 private void initWebView() {

        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
        mWebView
.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //設定 快取模式 // 開啟 DOM storage API 功能 mWebView.getSettings().setDomStorageEnabled(false); //開啟 database storage API 功能 mWebView.getSettings().setDatabaseEnabled(true); String cacheDirPath = getFilesDir().getAbsolutePath
()+APP_CACAHE_DIRNAME; // String cacheDirPath = getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME; Log.i(TAG, "cacheDirPath="+cacheDirPath); //設定資料庫快取路徑 // mWebView.getSettings().setDatabasePath(cacheDirPath); //設定 Application Caches 快取目錄 mWebView.getSettings().setAppCachePath
(cacheDirPath); //開啟 Application Caches 功能 mWebView.getSettings().setAppCacheEnabled(true); }

效果:瀏覽過網頁後斷網,再次開啟,依然能看到載入的網頁,即快取機制;

二、清除快取:

public void clearWebViewCache1(){

    //清理Webview快取資料庫
try {
        deleteDatabase("webview.db");
        deleteDatabase("webviewCache.db");
    } catch (Exception e) {
        e.printStackTrace();
    }

    //WebView 快取檔案
File appCacheDir = new File(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);
    Log.e(TAG, "appCacheDir path="+appCacheDir.getAbsolutePath());

    File webviewCacheDir = new File(getCacheDir().getAbsolutePath()+"/webviewCache");
    Log.e(TAG, "webviewCacheDir path="+webviewCacheDir.getAbsolutePath());

    //刪除webview 快取目錄
if(webviewCacheDir.exists()){
        deleteFile(webviewCacheDir);
    }
    //刪除webview 快取 快取目錄
if(appCacheDir.exists()){
        deleteFile(appCacheDir);
    }
}

/**
 * 遞迴刪除 檔案/資料夾
 *
 * @param file
*/
public void deleteFile(File file) {

    Log.i(TAG, "delete file path=" + file.getAbsolutePath());

    if (file.exists()) {
        if (file.isFile()) {
            file.delete();
        } else if (file.isDirectory()) {
            File files[] = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                deleteFile(files[i]);
            }
        }
        file.delete();
    } else {
        Log.e(TAG, "delete file no exists " + file.getAbsolutePath());
    }
}

效果:再次開啟網頁檢視快取的網頁,應該是不會再載入了,可是,可是,可是,現在的情況是依然能載入,失敗,失敗,失敗;

解決方案:

1、各種搜尋,各種測試,就是無法刪除快取資料,無語後開始英文搜尋;

2、在某一stackoverflow回覆區找到如下解決方案,最終完美破解:

public void clearWebViewCache(){

    File file = this.getApplicationContext().getCacheDir().getAbsoluteFile();
    deleteFile(file);
}
/**
 * 遞迴刪除 檔案/資料夾
 *
 * @param file
*/
public void deleteFile(File file) {

    Log.i("TAG", "delete file path=" + file.getAbsolutePath());

    if (file.exists()) {
        if (file.isFile()) {
            file.delete();
        } else if (file.isDirectory()) {
            File files[] = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                deleteFile(files[i]);
            }
        }
        file.delete();
    } else {
        Log.e("TAG", "delete file no exists " + file.getAbsolutePath());
    }
}

最終效果:離線快取的網頁已沒有相關資料了,一個教訓,還是去英文資料比較實在高效!

相關推薦

關於AndroidWebView載入網頁快取清除問題

無獨有偶,Android開發中也需要一個網頁快取機制,自然網路上成熟的案例舉不勝舉,比如: 一、設定快取: private static final String APP_CACAHE_DIRNA

Android使用WebView載入網頁

在AndroidManifest.xml設定訪問網路許可權: <span style="font-size:24px;"><span style="font-size:24px;"

AndroidWebView載入網頁的幾種方式及網路異常處理

1.載入本地assert目錄下檔案(error.html) webcontent.loadUrl(" file:///android_asset/error.html "); 2.載入網路url(http://www.csdn.com) webcontent.loadUrl

Android -WebView實現離線快取閱讀

前言 本篇部落格要實現的是一個離線下載和離線閱讀的功能,這是很多閱讀類app都常見的一個功能,典型的應用就是網易新聞。什麼是離線下載?其實這個概念是比較模糊,是離線之後下載呢,還是下載之後離線,但稍微有點腦子的人都知道沒有網路之後怎麼下載呢?所以離線下載這個功能是”在有網路的情況下,把資源下載到本地“,離線

Android使用WebView載入網頁遮蔽系統瀏覽器的方法

在onCreate()方法裡: WebView myWebView=(WebView)findViewById(R.id.webview); myWebView.setWebViewClient(new WebViewClient() {                      publicboolean

androidWebView載入網頁設定進度條

我們平時在進行安卓開發使用到webview載入網頁時,我們不能準確瞭解網頁的載入進度,因此為了提高使用者體驗,我們在webview中加入進度條顯示載入進度。 程式預覽介面: 一、主介面xml佈局檔案 <LinearLayout xmlns:android="ht

混合開發webView載入html,android html之間進行資料互動

現在混合開發比較普遍了,其實早就該學學了,只限於自己對html不是很熟,搭的介面太醜了,哈哈… 今天寫Demo的需求是這樣的 1、在一個介面裡,半面html,半面android原生控制元件。 2、點選html傳送html的資料給android ,andro

Android: WebView載入網頁的幾種方式及網路異常處理

1.載入本地assert目錄下檔案(error.html) webcontent.loadUrl(" file:///android_asset/error.html "); 2.載入網路url(http://www.csdn.com) webcontent.loadUrl(" http://www.csd

android:webview載入網頁速度很慢的的究極解決方案

 Android客戶端中混搭HTML頁面,會出現雖然HTML內容載入完成,標題也正常顯示,但是整個網頁需要等到近5秒(甚至更多)時間才會顯示出來。研究了很久,搜遍了國外很多網站,也看過PhoneGap的程式碼,一直無解。        一般人堆WebView的加速,都是建

android中的webview載入網頁只想顯示部分內容改怎麼做

@Override public void onPageFinished(WebView view, String url) { if(url!=null && url.contains("/p/resource/weapon/iProductID/39")){ S

android webview載入網頁按後退鍵黑屏一下問題的解決方案

出現這個問題剛開始還真是一頭霧水,不知道怎麼解決,後來跟同事一交流,發現凡是這種問題,很大一部分原因是application的style,或者activity的style設定問題,比如啟動頁黑屏問題也

Android WebView載入網頁,實現前進、後退、重新整理、超連結

你也可以檢視我的其他同類文章,也會讓你有一定的收貨! 先在要顯示網頁的佈局檔案中宣告WebView 在Activity中例項化WebView 呼叫WebView的loadUrl( )方法,設定WevView要顯示的網頁 為了讓WebView能夠響應超連結

android webview 載入網頁顯示不完整解決辦法

看有沒有這個屬性: webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); 註釋掉,就ok了; settings.setLayoutAlgor

Android Webview載入網頁內容不全

之前在開發時,要求用webview載入一個url展示活動頁面,並無其他需求,很簡單的一個需求。然後遇到一個坑——載入的網頁內容不全,花了幾個小時,試了網上的一些方法並沒有效果。 最後詢問前端的同學得知,這個網頁用了動態載入,並不會在第一次載入時就載入全部內容。

Android WebView載入網頁,實現前進 後退 重新整理 超連結

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

android通過webView載入第三方h5應用,無法載入圖片播放視訊的解決方法

只需給webview的配置中加上下面這段程式碼即可解決 這是Android5.0 WebView中Http和Https混合問題,在Android5.0 以及以上的系統,當WebView載入的連結為Https開頭,但是連結裡面的內容,比如圖片為Http連結,這時

Android控制元件 WebView載入網頁

新增控制元件<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" androi

androidwebview獲取網頁登陸賬號密碼

使用webview獲取html頁面資訊 需求:抓取webview開啟的頁面中登陸資訊,簡單點說就是獲取第三方的賬號和密碼。(咋一想,這尼瑪有點坑啊,獲取別人的資訊,怎麼都不太好吧。但是也得實現呀。。。) 本文將以抓取百度賬號資訊為例。(這尼瑪也是一個坑。。。

Androidwebview載入本地html、本apk內html遠端URL

1.佈局檔案片段:res-layout <WebView android:id="@+id/Toweb" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 2.Ja

Android控制元件WebView網頁調轉回APP)

問題來源:網頁跳轉回應用 APP開啟網頁,網頁放置在伺服器中(例如,APP開啟百度網頁),開啟網頁之後在某一時刻需要從網頁在跳轉回到APP。 實現原理:使用URI再加上Intent來實現。 URI介紹: 就Android平臺而言,URI主要分三個部分:s