修改后的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<code>import</code> <code>java.io.InputStream;</code>
<code>import</code> <code>java.lang.ref.WeakReference;</code>
<code>import</code> <code>java.net.HttpURLConnection;</code>
<code>import</code> <code>java.net.URL;</code>
<code>import</code> <code>android.graphics.Bitmap;</code>
<code>import</code> <code>android.graphics.BitmapFactory;</code>
<code>import</code> <code>android.os.AsyncTask;</code>
<code>import</code> <code>android.util.Log;</code>
<code>import</code> <code>android.widget.ImageView;</code>
<code>/**</code>
<code> </code><code>* @类名:ImageDownloader</code>
<code> </code><code>* @功能描述:优化的ImageDownloader, 不带缓存,在线下载,用户头像请使用。</code>
<code> </code><code>* @作者: William Xu</code>
<code> </code><code>* @创建日期:2013-6-7</code>
<code> </code><code>* @修改人:</code>
<code> </code><code>* @修改日期:</code>
<code> </code><code>* @修改备注:</code>
<code> </code><code>* @版本号:1.0</code>
<code> </code><code>*/</code>
<code>public</code> <code>class</code> <code>ImageDownloader {</code>
<code> </code><code>public</code> <code>void</code> <code>download(String url, ImageView imageView) {</code>
<code> </code><code>BitmapDownloaderTask task = </code><code>new</code> <code>BitmapDownloaderTask(imageView);</code>
<code> </code><code>task.execute(url);</code>
<code> </code><code>}</code>
<code> </code><code>class</code> <code>BitmapDownloaderTask </code><code>extends</code> <code>AsyncTask<String, Void, Bitmap> {</code>
<code> </code>
<code> </code><code>private</code> <code>final</code> <code>WeakReference<ImageView> imageViewReference; </code><code>// 使用WeakReference解决内存问题</code>
<code> </code><code>public</code> <code>BitmapDownloaderTask(ImageView imageView) {</code>
<code> </code><code>imageViewReference = </code><code>new</code> <code>WeakReference<ImageView>(imageView);</code>
<code> </code><code>}</code>
<code> </code><code>@Override</code>
<code> </code><code>protected</code> <code>Bitmap doInString... params) { </code><code>// 实际的下载线程,内部其实是concurrent线程,所以不会阻塞</code>
<code> </code><code>Bitmap bitmap = </code><code>null</code><code>;</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>URL imageUrl = </code><code>new</code> <code>URL(params[</code><code>0</code><code>]);</code>
<code> </code><code>HttpURLConnection conn = (HttpURLConnection) imageUrl</code>
<code> </code><code>.openConnection();</code>
<code> </code><code>conn.setConnectTimeout(</code><code>30000</code><code>);</code>
<code> </code><code>conn.setReadTimeout(</code><code>30000</code><code>);</code>
<code> </code><code>conn.setInstanceFollowRedirects(</code><code>true</code><code>);</code>
<code> </code><code>InputStream is = conn.getInputStream();</code>
<code> </code><code>bitmap = BitmapFactory.decodeStream(is);</code>
<code> </code><code>} </code><code>catch</code> <code>(Exception ex) {</code>
<code> </code><code>Log.e(</code><code>""</code><code>,</code>
<code> </code><code>"getBitmap catch Exception...\nmessage = "</code>
<code> </code><code>+ ex.getMessage());</code>
<code> </code><code>}</code>
<code> </code><code>return</code> <code>bitmap;</code>
<code> </code><code>protected</code> <code>void</code> <code>onPostExecute(Bitmap bitmap) { </code><code>// 下载完后执行的</code>
<code> </code><code>if</code> <code>(isCancelled()) {</code>
<code> </code><code>bitmap = </code><code>null</code><code>;</code>
<code> </code><code>if</code> <code>(imageViewReference != </code><code>null</code><code>) {</code>
<code> </code>
<code> </code><code>ImageView imageView = imageViewReference.get();</code>
<code> </code><code>if</code> <code>(imageView != </code><code>null</code> <code>&& bitmap != </code><code>null</code><code>) {</code>
<code> </code>
<code> </code><code>imageView.setImageBitmap(bitmap); </code><code>// 下载完设置imageview为刚才下载的bitmap对象</code>
<code> </code><code>}</code>
<code>}</code>
本文转自william_xu 51CTO博客,原文链接:http://blog.51cto.com/williamx/1218518,如需转载请自行联系原作者