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 }

Android 使用AsyncTask 下载图片的例子,学会使用AsyncTask的更多相关文章

  1. Android 异步任务——AsyncTask (附使用AsyncTask下载图片Demo)

    我们编程的时候经常需要处理同步任务和异步任务,在Android里面存在一个特性,就是UI线程是不安全的线程.所谓UI线程不安全也就是我们的主线程(进程启动的第一个线程)不能在线程外操作主线程的资源.因 ...

  2. android 多线程 AsyncTask 下载图片

    AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...

  3. Android采用HttpClient下载图片

    在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...

  4. Android测试AsyncTask下载图片

    package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...

  5. Android 本地/网路下载图片实现放大缩小

     Android 本地加载/网路下载图片实现放大缩小拖拉效果,自定义控件. package com.example.ImageViewCustom; import android.app.Activi ...

  6. Android使用HttpURLConnection下载图片

    讲到http就必须要了解URI和URL URI (uniform resource identifier)统一资源标志符: URL(uniform resource location )统一资源定位符 ...

  7. AsyncTask下载图片

    最近在看一个非常早期曾经写过代码,装上去召回.本文首先召回AsyncTask的基本使用.   AsyncTask说简单点就是 开启一个线程.而且把结果提交给ui线程. Thread+Handler,只 ...

  8. 【Android 应用开发】Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载

    19af543b068bdb7f27787c2bc69aba7f Additional Download (32-, 64-bit) Package r10 STL debug info androi ...

  9. android:异步任务asyncTask介绍及异步任务下载图片(带进度条)

    为什么要用异步任务? 在android中仅仅有在主线程才干对ui进行更新操作.而其他线程不能直接对ui进行操作 android本身是一个多线程的操作系统,我们不能把全部的操作都放在主线程中操作 .比方 ...

随机推荐

  1. jQuery插件---轻量级的弹出窗口wBox

    Box Demo wBox——轻量级的弹出窗口jQuery插件,基于jQuery1.4.2开发,主要实现弹出框的效果,并且加入了很多有趣的功能,比如可img灯箱效果,callback函数,显示隐藏层, ...

  2. windows 系统注册dll文件

    使用管理员身份注册:命令提示符 管理员身份运行 32 位系统:regsvr32 %windir%\system32\jscript.dll 64 位系统:regsvr32 %windir%\SysWO ...

  3. DIL中基本数据类型

    (1)基本数据类型:OMG IDL基本数据类型包括short.long和相应的无符号(unsigned)类型,表示的字长分别为16.32位.  (2)浮点数类型:OMG IDL浮点数类型包括float ...

  4. [iOS开发]WKWebView加载JS

    最近项目要用webView加载js文件,挺同事说WKWebView比UIWebView更加好用,于是我今天就试试,百度一发,自己写了个demo. 先看我写的代码,然后再来看WKWebView跟UIWe ...

  5. mariadb cache

    Since MariaDB Galera cluster versions 5.5.40 and 10.0.14 you can use the query cache. Earlier versio ...

  6. 用free -m查看的结果:

    用free -m查看的结果: # free -m          total    used    free     shared buffers     cached Mem:           ...

  7. 获取一个gridcontrol的数据行数

    ((DataTable)gc_excel.DataSource).Rows.Count;

  8. CSS3 线型渐变

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. UIScroll和UIPickView

    .h #import <UIKit/UIKit.h> #define WIDTH self.view.frame.size.width #define HEIGHT self.view.f ...

  10. 用div做下拉列表

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...