Android 使用AsyncTask 下载图片的例子,学会使用AsyncTask

1.添加布局文件: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     <ImageView
 8         android:id="@+id/mImageView"
 9         android:layout_width="300dp"
10         android:layout_height="300dp" />
11 
12     <ProgressBar
13         android:id="@+id/mProgressBar"
14         style="?android:attr/progressBarStyleHorizontal"
15         android:layout_width="fill_parent"
16         android:layout_height="wrap_content"
17         android:maxHeight="10dip"
18         android:minHeight="10dip" />
19 
20     <Button
21         android:id="@+id/btnGetImg"
22         android:layout_width="120dp"
23         android:layout_height="50dp"
24         android:text="Getmage" />
25 
26     <Button
27         android:id="@+id/btnAbort"
28         android:layout_width="120dp"
29         android:layout_height="50dp"
30         android:text="Abort" />
31 
32 </LinearLayout>
复制代码

2.添加java文件MainActivity.java

复制代码
  1 package com.example.loadimgfrominternet;
  2 
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.io.OutputStream;
  6 import java.net.HttpURLConnection;
  7 import java.net.MalformedURLException;
  8 import java.net.URL;
  9 import java.net.URLConnection;
 10 
 11 import android.app.Activity;
 12 import android.content.Context;
 13 import android.graphics.Bitmap;
 14 import android.graphics.BitmapFactory;
 15 import android.os.AsyncTask;
 16 import android.os.Bundle;
 17 import android.os.SystemClock;
 18 import android.view.View;
 19 import android.view.View.OnClickListener;
 20 import android.widget.Button;
 21 import android.widget.ImageView;
 22 import android.widget.ProgressBar;
 23 
 24 public class MainActivity extends Activity implements OnClickListener {
 25 
 26     private Button btnGetImg;
 27     private Button btnAbort;
 28     private ProgressBar mProgressBar;
 29     private ImageView mImageView;
 30     private static final String ImageUrl = "https://images0.cnblogs.com/i/169207/201408/112229149526951.png";
 31 
 32     ImageLoader loader = null;
 33 
 34     @Override
 35     protected void onCreate(Bundle savedInstanceState) {
 36         super.onCreate(savedInstanceState);
 37         setContentView(R.layout.activity_main);
 38         initView();
 39     }
 40 
 41     private void initView() {
 42         btnGetImg = (Button) findViewById(R.id.btnGetImg);
 43         btnAbort = (Button) findViewById(R.id.btnAbort);
 44         mProgressBar = (ProgressBar) findViewById(R.id.mProgressBar);
 45         btnGetImg.setOnClickListener(this);
 46         btnAbort.setOnClickListener(this);
 47 
 48         mProgressBar.setVisibility(View.INVISIBLE);
 49         mImageView = (ImageView) findViewById(R.id.mImageView);
 50     }
 51 
 52     @Override
 53     public void onClick(View v) {
 54         int id = v.getId();
 55         if (id == R.id.btnGetImg) {
 56             loader = new ImageLoader();
 57             loader.execute(ImageUrl);
 58             btnGetImg.setEnabled(false);
 59         } else if (id == R.id.btnAbort) {
 60             loader.cancel(true);
 61             btnGetImg.setEnabled(true);
 62         }
 63     }
 64 
 65     class ImageLoader extends AsyncTask<String, Integer, Bitmap> {
 66         @Override
 67         protected void onPreExecute() {
 68             mProgressBar.setVisibility(View.VISIBLE);
 69             mProgressBar.setProgress(0);
 70             mImageView.setImageResource(R.drawable.noimg);
 71             super.onPreExecute();
 72         }
 73 
 74         @Override
 75         protected Bitmap doInBackground(String... params) {
 76             String imgUri = params[0];
 77 
 78             try {
 79                 URL url = null;
 80                 HttpURLConnection conn = null;
 81                 InputStream inputStream = null;
 82                 OutputStream outputStream = null;
 83                 String filename = "local_temp_image";
 84 
 85                 try {
 86 
 87                     url = new URL(imgUri);
 88                     conn = (HttpURLConnection) url.openConnection();
 89                     conn.setDoInput(true);
 90                     conn.setDoOutput(false);
 91                     conn.setConnectTimeout(20 * 1000);
 92                     inputStream = conn.getInputStream();
 93                     outputStream = openFileOutput(filename,
 94                             Context.MODE_PRIVATE);
 95                     byte[] data = new byte[1024];
 96                     int seg = 0;
 97                     long total = conn.getContentLength();
 98                     long current = 0;
 99                     while (!isCancelled()
100                             && (seg = inputStream.read(data)) != -1) {
101                         outputStream.write(data, 0, seg);
102                         current += seg;
103                         int progress = (int) ((float) current / total * 100);
104                         publishProgress(progress);// // 通知进度条UI更新
105                         SystemClock.sleep(1000);
106                     }
107                 } finally {
108                     if (conn != null) {
109                         conn.disconnect();
110                     }
111                     if (inputStream != null) {
112                         inputStream.close();
113                     }
114                     if (outputStream != null) {
115                         outputStream.close();
116                     }
117                 }
118                 // return BitmapFactory.decodeStream(HandlerData(ImageUrl));
119                 return BitmapFactory.decodeFile(getFileStreamPath(filename)
120                         .getAbsolutePath());
121             } catch (MalformedURLException e) {
122                 e.printStackTrace();
123             } catch (IOException e) {
124                 e.printStackTrace();
125             }
126             return null;
127         }
128 
129         @Override
130         protected void onProgressUpdate(Integer... values) {
131             if (isCancelled())
132                 return;
133             mProgressBar.setProgress(values[0]);
134             btnGetImg.setText(values[0] + "%");
135             super.onProgressUpdate(values);
136         }
137 
138         @Override
139         protected void onPostExecute(Bitmap bitmap) {
140             if (bitmap != null) {
141                 mImageView.setImageBitmap(bitmap);
142             }
143             mProgressBar.setVisibility(View.INVISIBLE);
144             mProgressBar.setProgress(0);
145             btnAbort.setEnabled(false);
146             super.onPostExecute(bitmap);
147         }
148     }
149 
150     /* 根据URI地址读取输入流 */
151     public static InputStream HandlerData(String url) {
152         InputStream inStream = null;
153 
154         try {
155             URL feedUrl = new URL(url);
156             URLConnection conn = feedUrl.openConnection();
157             conn.setConnectTimeout(10 * 1000);
158             inStream = conn.getInputStream();
159         } catch (Exception e) {
160             e.printStackTrace();
161         }
162 
163         return inStream;
164     }
165 }
原文地址:https://www.cnblogs.com/skying555/p/4667297.html