第一次连接网络下载图片后,将在本机/data/data/...下保存图片;第二次打开应用程序点击“获取图片”将直接从本机缓存获取。
缓存图片保存位置如下:
MainActivity.java
1 package com.example.day10_02getpicturebycache;
2
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.InputStream;
6 import java.net.HttpURLConnection;
7 import java.net.URL;
8
9
10
11 import android.app.Activity;
12 import android.graphics.Bitmap;
13 import android.graphics.BitmapFactory;
14 import android.os.Bundle;
15 import android.os.Handler;
16 import android.os.Message;
17 import android.view.Menu;
18 import android.view.MenuItem;
19 import android.view.View;
20 import android.widget.ImageView;
21 import android.widget.Toast;
22
23 public class MainActivity extends Activity {
24 @Override
25 protected void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState);
27 setContentView(R.layout.activity_main);
28 }
29
30 final static int MSG_DOWNLOAD_OK =1;
31 final static int MSG_DOWNLOAD_ERROR =2;
32
33 Handler handler = new Handler(){
34 @Override
35 public void handleMessage(Message msg) {
36 super.handleMessage(msg);
37 //针对message进行处理
38 switch (msg.what) {
39 case MSG_DOWNLOAD_OK:
40 ImageView iv= (ImageView) findViewById(R.id.iv_pic);
41 iv.setImageBitmap((Bitmap)msg.obj);
42 break;
43 case MSG_DOWNLOAD_ERROR:
44 Toast.makeText(MainActivity.this, "下载失败", 1).show();
45 break;
46 default:
47 break;
48 }
49 }
50 };
51
52 public void getpicture(View v){
53 File file = new File(getCacheDir(), "zy.jpg");
54 if(file.exists()) {
55 Bitmap bm =new BitmapFactory().decodeFile(file.getAbsolutePath());
56 ImageView iv= (ImageView) findViewById(R.id.iv_pic);
57 iv.setImageBitmap(bm);
58 }
59 else {
60 //下面的整个代码是从网络url下载对应的数据
61 Thread tread = new Thread(){
62 public void run() {
63 String path = "http://192.168.3.30:8080/tomcat.gif";
64 try {
65 URL url = new URL(path);
66 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
67 //set paramter 3
68 conn.setReadTimeout(5000);
69 conn.setRequestMethod("GET");
70 conn.setConnectTimeout(5000);
71 // pending;
72 conn.connect();
73
74 if (conn.getResponseCode()==200) {
75 InputStream is = conn.getInputStream();
76 //如何放到缓存?
77 File file = new File(getCacheDir(), "zy.jpg");
78 FileOutputStream fos = new FileOutputStream(file);
79 byte[] b =new byte[1024];
80 int len=0;
81 while ((len=is.read(b))!=-1) {
82 fos.write(b, 0, len);
83 }
84 is.close();
85 fos.close();
86
87 //从一个保存的cache文件中,去得到一个bitmap对象。
88 Bitmap bm = new BitmapFactory().decodeFile(file.getAbsolutePath());
89
90 Message msg = handler.obtainMessage();
91 msg.what = MSG_DOWNLOAD_OK;
92 msg.obj = bm;
93 handler.sendMessage(msg);
94
95 }
96 else {
97 Message msg = handler.obtainMessage();
98 msg.what =MSG_DOWNLOAD_ERROR;
99 handler.sendMessage(msg);
100 //Toast.makeText(this, "下载失败", 1).show();
101 }
102 }catch (Exception e) {
103 e.printStackTrace();
104 }
105 };
106 };
107 tread.start();
108 }
109 }
110 }
activity_main.xml
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical" >
6
7 <TextView
8 android:layout_width="wrap_content"
9 android:layout_height="wrap_content"
10 android:text="hello_world" />
11 <Button
12 android:layout_width="wrap_content"
13 android:layout_height="wrap_content"
14 android:text="获取图片"
15 android:onClick="getpicture"/>
16 <ImageView
17 android:id="@+id/iv_pic"
18 android:layout_width="wrap_content"
19 android:layout_height="wrap_content"
20 android:src="@drawable/ic_launcher"
21 ></ImageView>
22 </LinearLayout>
AndroidManifest.xml中权限设置:
1 <uses-permission android:name="android.permission.INTERNET"/>