095 | /** |
096 | * 采用普通方式异步的加载图片 |
097 | */ |
098 | /*private void asyncloadImage(final ImageView iv_header, final String path) { |
099 | final Handler mHandler = new Handler() { |
100 | @Override |
101 | public void handleMessage(Message msg) { |
102 | super.handleMessage(msg); |
103 | if (msg.what == SUCCESS_GET_IMAGE) { |
104 | Uri uri = (Uri) msg.obj; |
105 | if (iv_header != null && uri != null) { |
106 | iv_header.setImageURI(uri); |
107 | } |
108 |
109 | } |
110 | } |
111 | }; |
112 | // 子线程,开启子线程去下载或者去缓存目录找图片,并且返回图片在缓存目录的地址 |
113 | Runnable runnable = new Runnable() { |
114 | @Override |
115 | public void run() { |
116 | ContactService service = new ContactService(); |
117 | try { |
118 | //这个URI是图片下载到本地后的缓存目录中的URI |
119 | Uri uri = service.getImageURI(path, cache); |
120 | Message msg = new Message(); |
121 | msg.what = SUCCESS_GET_IMAGE; |
122 | msg.obj = uri; |
123 | mHandler.sendMessage(msg); |
124 | } catch (Exception e) { |
125 | e.printStackTrace(); |
126 | } |
127 | } |
128 | }; |
129 | new Thread(runnable).start(); |
130 | }*/ |
131 | } |
自定义Adapter中,我们要注意 AsyncImageTask这个类继承了AsyncTask类,AsyncTask是Android中常用来做异步任务的类,对线程池进行了封装,详细分析稍后再贴出一篇Blog。
下面是我们从服务器上获取并且解析的Xml文件
01 | <?xml version="1.0" encoding="UTF-8"?> |
02 | <contacts> |
03 | <contact id="1"> |
04 | <name>张飞</name> |
05 | <image src="http://192.168.1.103:8080/mymyweb/images/1.gif"/> |
06 | </contact> |
07 | <contact id="2"> |
08 | <name>博文</name> |
09 | <image src="http://192.168.1.103:8080/myweb/images/2.gif"/> |
10 | </contact> |
11 | <contact id="3"> |
12 | <name>张天佑</name> |
13 | <image src="http://192.168.1.103:8080/myweb/images/3.gif"/> |
14 | </contact> |
15 | <contact id="4"> |
16 | <name>松德</name> |
17 | <image src="http://192.168.1.103:8080/myweb/images/4.gif"/> |
18 | </contact> |
19 | <contact id="5"> |
20 | <name>赵薇</name> |
21 | <image src="http://192.168.1.103:8080/myweb/images/5.gif"/> |
22 | </contact> |
23 | <contact id="6"> |
24 | <name>李静</name> |
25 | <image src="http://192.168.1.103:8080/myweb/images/6.gif"/> |
26 | </contact> |
27 | <contact id="7"> |
28 | <name>李明</name> |
29 | <image src="http://192.168.1.103:8080/myweb/images/7.gif"/> |
30 | </contact> |
31 | <contact id="8"> |
32 | <name>黎明</name> |
33 | <image src="http://192.168.1.103:8080/myweb/images/8.gif"/> |
34 | </contact> |
35 | |
36 | <contact id="9"> |
37 | <name>秦桧</name> |
38 | <image src="http://192.168.1.103:8080/myweb/images/9.gif"/> |
39 | </contact> |
40 | <contact id="10"> |
41 | <name>朱德</name> |
42 | <image src="http://192.168.1.103:8080/myweb/images/10.gif"/> |
43 | </contact> |
44 | <contact id="11"> |
45 | <name>冯巩</name> |
46 | <image src="http://192.168.1.103:8080/myweb/images/11.gif"/> |
47 | </contact> |
48 | <contact id="12"> |
49 | <name>dylan</name> |
50 | <image src="http://192.168.1.103:8080/myweb/images/12.gif"/> |
51 | </contact> |
52 | <contact id="13"> |
53 | <name>黄单</name> |
54 | <image src="http://192.168.1.103:8080/myweb/images/13.gif"/> |
55 | </contact> |
56 | <contact id="14"> |
57 | <name>含蕊</name> |
58 | <image src="http://192.168.1.103:8080/myweb/images/14.gif"/> |
59 | </contact> |
60 | <contact id="15"> |
61 | <name>欣琪</name> |
62 | <image src="http://192.168.1.103:8080/myweb/images/15.jpg"/> |
63 | </contact> |
64 | <contact id="16"> |
65 | <name>李忠华</name> |
66 | <image src="http://192.168.1.103:8080/myweb/images/16.jpg"/> |
67 | </contact> |
68 | <contact id="17"> |
69 | <name>方产员</name> |
70 | <image src="http://192.168.1.103:8080/myweb/images/17.jpg"/> |
71 | </contact> |
72 | <contact id="18"> |
73 | <name>张光</name> |
74 | <image src="http://192.168.1.103:8080/myweb/images/18.jpg"/> |
75 | </contact> |
76 | </contacts> |
本demo中为了安全起见,还对下载下来的图片的文件名进行了MD5加密,下面是MD5加密的代码,
01 | public class MD5 { |
02 |
03 | public static String getMD5(String content) { |
04 | try { |
05 | MessageDigest digest = MessageDigest.getInstance("MD5"); |
06 | digest.update(content.getBytes()); |
07 | return getHashString(digest); |
08 | |
09 | } catch (NoSuchAlgorithmException e) { |
10 | e.printStackTrace(); |
11 | } |
12 | return null; |
13 | } |
14 | |
15 | private static String getHashString(MessageDigest digest) { |
16 | StringBuilder builder = new StringBuilder(); |
17 | for (byte b : digest.digest()) { |
18 | builder.append(Integer.toHexString((b >> 4) & 0xf)); |
19 | builder.append(Integer.toHexString(b & 0xf)); |
20 | } |
21 | return builder.toString(); |
22 | } |
23 | } |
以上省略了Contact.java这个domain类,通过这个demo,可以看出Android中会经常需要进行异步任务的处理,所以我们会常常用到自己手动开启线程,handler机制,或者AsyncTask类等手段来保证应用的性能。