Android之WebView緩衝

來源:互聯網
上載者:User

 

在項目中經常會使用到WebView控制項,當載入html頁面時,會在/data/data/應用package目錄下產生database與cache兩個檔案夾如如示:

請求的url記錄是儲存在webviewCache.db,而url的內容是儲存在webviewCache檔案夾下.

         

為了便於理解,接下來類比一個案例,定義一個html檔案,在裡面顯示一張圖片,用WebView載入出來,然後再試著從緩衝裡把這張圖片讀取出來並顯示。

      

第一步:建立一個Android工程命名為WebViewCache.目錄結構如下:

     

第二步:在assets目錄下建立一個html檔案,命名為index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>WebViewCacheDemo</title>        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">    <meta http-equiv="description" content="this is my page">    <meta http-equiv="content-type" content="text/html; charset=UTF-8">      </head>    <body>     <img src="http://img04.taobaocdn.com/imgextra/i4/608825099/T2nGXBXXpaXXXXXXXX_!!608825099.jpg_310x310.jpg"/>  </body></html>

             

第三步:修改main.xml布局檔案,一個WebView控制項一個Button(點擊載入緩衝圖片用),代碼如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="fill_parent"    android:layout_height="fill_parent">    <WebView android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:id="@+id/webView"/>    <Button android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal"        android:text="從緩衝讀取圖片"        android:id="@+id/button"/></LinearLayout>

        

第四步:修改主核心程式WebViewCacheDemo.java,這裡我只載入了index.html檔案,按鈕事件暫時沒寫,代碼如下:

package com.ljq.activity;import java.io.File;import java.io.FileInputStream;import android.app.Activity;import android.app.Dialog;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.view.View;import android.webkit.WebView;import android.widget.Button;import android.widget.ImageView;public class WebViewActivity extends Activity {    private WebView webView;    private static final String url="file:///android_asset/index.html";        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                webView=(WebView)findViewById(R.id.webView);        webView.loadUrl(url);    }}

        

第五步:在AndroidMainifest.xml檔案中加訪問網路的許可權:

<uses-permission android:name="android.permission.INTERNET" />

運行效果如下:

           

此時我們在WebViewCache.db裡的cache.table裡多了一條記錄如所示:

               

在cache/webviewCache/目錄下多了一個10d8d5cd檔案,剛好和cache.table裡的filepath,我們可以斷定這個檔案就是我們從網上拽下來的圖片:

       

為了驗證猜想,我給Button增加事件響應,就是彈出Dialog,裡面載入緩衝的圖片,完整代碼如下:

package com.ljq.activity;import java.io.File;import java.io.FileInputStream;import android.app.Activity;import android.app.Dialog;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.view.View;import android.webkit.WebView;import android.widget.Button;import android.widget.ImageView;public class WebViewActivity extends Activity {    private WebView webView;    private static final String url="file:///android_asset/index.html";        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                webView=(WebView)findViewById(R.id.webView);        webView.loadUrl(url);                //點擊按鈕時彈出對話方塊        Button button=(Button)findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {                    public void onClick(View v) {                ImageView imageView=new ImageView(WebViewActivity.this);                imageView.setImageBitmap(getPictureFromCache());                Builder builder=new android.app.AlertDialog.Builder(WebViewActivity.this);                //設定對話方塊的表徵圖                builder.setTitle("從緩衝查看圖片");                builder.setView(imageView);                //退出按鈕                builder.setPositiveButton("退  出", new OnClickListener(){                    public void onClick(DialogInterface dialog, int which) {                        //關閉alert對話方塊架                        dialog.cancel();                    }                                    });                builder.create().show();            }                });    }        /**     * 從緩衝擷取圖片     *      * @return     */    private Bitmap getPictureFromCache(){        Bitmap bitmap=null;        try {            //這裡寫死,在實際開發項目中要靈活使用            File file=new File(getCacheDir()+"/webviewCache/10d8d5cd");            FileInputStream inStream=new FileInputStream(file);            bitmap=BitmapFactory.decodeStream(inStream);        } catch (Exception e) {            e.printStackTrace();        }        return bitmap;    }} 

第六步:再次運行工程,點擊button按鈕,效果如所示:

本文轉自http://www.cnblogs.com/linjiqin/archive/2011/10/28/2227943.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.