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 }
Android 使用AsyncTask 下载图片的例子,学会使用AsyncTask的更多相关文章
- Android 异步任务——AsyncTask (附使用AsyncTask下载图片Demo)
我们编程的时候经常需要处理同步任务和异步任务,在Android里面存在一个特性,就是UI线程是不安全的线程.所谓UI线程不安全也就是我们的主线程(进程启动的第一个线程)不能在线程外操作主线程的资源.因 ...
- android 多线程 AsyncTask 下载图片
AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...
- Android采用HttpClient下载图片
在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...
- Android测试AsyncTask下载图片
package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...
- Android 本地/网路下载图片实现放大缩小
Android 本地加载/网路下载图片实现放大缩小拖拉效果,自定义控件. package com.example.ImageViewCustom; import android.app.Activi ...
- Android使用HttpURLConnection下载图片
讲到http就必须要了解URI和URL URI (uniform resource identifier)统一资源标志符: URL(uniform resource location )统一资源定位符 ...
- AsyncTask下载图片
最近在看一个非常早期曾经写过代码,装上去召回.本文首先召回AsyncTask的基本使用. AsyncTask说简单点就是 开启一个线程.而且把结果提交给ui线程. Thread+Handler,只 ...
- 【Android 应用开发】Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载
19af543b068bdb7f27787c2bc69aba7f Additional Download (32-, 64-bit) Package r10 STL debug info androi ...
- android:异步任务asyncTask介绍及异步任务下载图片(带进度条)
为什么要用异步任务? 在android中仅仅有在主线程才干对ui进行更新操作.而其他线程不能直接对ui进行操作 android本身是一个多线程的操作系统,我们不能把全部的操作都放在主线程中操作 .比方 ...
随机推荐
- 一个appium 博客
http://www.cnblogs.com/tobecrazy/category/699177.html appium Java控制Appium server start/stop 摘要: 相信很多 ...
- Windows下python安装MySQLdb
安装MySQLdb需要在电脑上安装MySQL connector C,只需要这个connector就好,不需要把mysql装全. 另外,需要安装VC for python提供编译. 到官网上下载脚本进 ...
- Mysql 自动备份脚本
转自: Mysql 自动备份脚本2 - - ITeye技术网站http://kangh.iteye.com/blog/2309091 备份方案: 备份主机:192.168.10.11 数据库服务器:1 ...
- iptables详解--转
出处:http://yijiu.blog.51cto.com/433846/1356254 iptables详解 基本概念: 1.防火墙工作在主机边缘:对于进出本网络或者本主机的数据报文,根据事先设定 ...
- Bcdedit命令使用详解使用方法
XP,WIN2003,VISTA,万indows,WIN2008多盘多系统多引导bcdedit的使用windows出了新系统vista,2008想赏赏鲜学习学习~~但又习惯于用旧的XP,2003,然而 ...
- Xcode如何简单安装Alcatraz
1.最简单直接,直接到github获取该项目 地址:www.github.com,搜索Alcatraz: 2.通过Xcode打开该项目,编译success后,退出Xcode,再启动,再弹出框选择loa ...
- expdp.sh and impdp.sh
####expdp.sh ###### ------------- -- UAT -- ------------- @D:\dba\change\UAT\eais\env\env_eaisua ...
- Exponential notation
Exponential notation You are given a positive decimal number x. Your task is to convert it to the &q ...
- UML基础概念(转)
UML基础概念 UML概述 uml简介 uml(unified Modeling Language )为面向对象软件设计提供统一的.标准的.可视化的建模语言.适用于描述以用例为驱动,以体系结构为中心的 ...
- 2015 HDU 计算机学院 院赛 1003 玩骰子
Problem Description Nias与Ains都特别喜欢玩骰子,而且都自以为比对方玩得更溜. 终于有一天,他们决定用骰子来一决高下! 一般的骰子玩法已经不足以体现他们的水平了,于是 ...