Android 用AsyncTask下载网络图片并显示百分比
1.添加布局文件:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <ImageView
android:id="@+id/mImageView"
android:layout_width="300dp"
android:layout_height="300dp" /> <ProgressBar
android:id="@+id/mProgressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxHeight="10dip"
android:minHeight="10dip" /> <Button
android:id="@+id/btnGetImg"
android:layout_width="120dp"
android:layout_height="50dp"
android:text="Getmage" /> <Button
android:id="@+id/btnAbort"
android:layout_width="120dp"
android:layout_height="50dp"
android:text="Abort" /> </LinearLayout>
2.添加java文件MainActivity.java
package com.example.loadimgfrominternet; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection; import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar; public class MainActivity extends Activity implements OnClickListener { private Button btnGetImg;
private Button btnAbort;
private ProgressBar mProgressBar;
private ImageView mImageView;
private static final String ImageUrl = "https://images0.cnblogs.com/i/169207/201408/112229149526951.png"; ImageLoader loader = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView() {
btnGetImg = (Button) findViewById(R.id.btnGetImg);
btnAbort = (Button) findViewById(R.id.btnAbort);
mProgressBar = (ProgressBar) findViewById(R.id.mProgressBar);
btnGetImg.setOnClickListener(this);
btnAbort.setOnClickListener(this); mProgressBar.setVisibility(View.INVISIBLE);
mImageView = (ImageView) findViewById(R.id.mImageView);
} @Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.btnGetImg) {
loader = new ImageLoader();
loader.execute(ImageUrl);
btnGetImg.setEnabled(false);
} else if (id == R.id.btnAbort) {
loader.cancel(true);
btnGetImg.setEnabled(true);
}
} class ImageLoader extends AsyncTask<String, Integer, Bitmap> {
@Override
protected void onPreExecute() {
mProgressBar.setVisibility(View.VISIBLE);
mProgressBar.setProgress();
mImageView.setImageResource(R.drawable.noimg);
super.onPreExecute();
} @Override
protected Bitmap doInBackground(String... params) {
String imgUri = params[]; try {
URL url = null;
HttpURLConnection conn = null;
InputStream inputStream = null;
OutputStream outputStream = null;
String filename = "local_temp_image"; try { url = new URL(imgUri);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(false);
conn.setConnectTimeout( * );
inputStream = conn.getInputStream();
outputStream = openFileOutput(filename,
Context.MODE_PRIVATE);
byte[] data = new byte[];
int seg = ;
long total = conn.getContentLength();
long current = ;
while (!isCancelled()
&& (seg = inputStream.read(data)) != -) {
outputStream.write(data, , seg);
current += seg;
int progress = (int) ((float) current / total * );
publishProgress(progress);// // 通知进度条UI更新
SystemClock.sleep();
}
} finally {
if (conn != null) {
conn.disconnect();
}
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
// return BitmapFactory.decodeStream(HandlerData(ImageUrl));
return BitmapFactory.decodeFile(getFileStreamPath(filename)
.getAbsolutePath());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
} @Override
protected void onProgressUpdate(Integer... values) {
if (isCancelled())
return;
mProgressBar.setProgress(values[]);
btnGetImg.setText(values[] + "%");
super.onProgressUpdate(values);
} @Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
mImageView.setImageBitmap(bitmap);
}
mProgressBar.setVisibility(View.INVISIBLE);
mProgressBar.setProgress();
btnAbort.setEnabled(false);
super.onPostExecute(bitmap);
}
} /* 根据URI地址读取输入流 */
public static InputStream HandlerData(String url) {
InputStream inStream = null; try {
URL feedUrl = new URL(url);
URLConnection conn = feedUrl.openConnection();
conn.setConnectTimeout( * );
inStream = conn.getInputStream();
} catch (Exception e) {
e.printStackTrace();
} return inStream;
}
}
3.运行效果图如下:

4.附上项目下载地址:
http://files.cnblogs.com/_ymw/LoadImgFromInternet_%E5%8D%9A%E5%AE%A2%E9%99%84%E4%BB%B6.rar
Android 用AsyncTask下载网络图片并显示百分比的更多相关文章
- Android初学-AsyncTask下载网络图片
AsyncTask 异步处理: mainfest: 注意添加的: -------------------- <uses-permission android:name="android ...
- Android开发-下载网络图片并显示到本地
Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...
- android 多线程 AsyncTask 下载图片
AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...
- AsyncTask下载网络图片
MyTask task = new MyTask(); task.execute(url); class MyTask extends AsyncTask<String, Integer, Bi ...
- Android测试AsyncTask下载图片
package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...
- AsyncTask下载网络图片的简单应用
1.imageTest package lpc.com.asynctaskdemo; import android.app.Activity; import android.graphics.Bitm ...
- Android 使用AsyncTask 下载图片的例子,学会使用AsyncTask
1.添加布局文件:activity_main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...
- Android中如何下载文件并显示下载进度
原文地址:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1125/2057.html 这里主要讨论三种方式:AsyncTask.Serv ...
- Android开发学习—— 下载网络图片
现在几乎所有的应用都在使用网络来达到浏览的目的.对于特定领域 使用xnpp协议 像即时通讯软件.但大多数还是使用HTTP协议来交互. 网络图片查看器 HTTP协议 下载网络 图片 <Relati ...
随机推荐
- Python-爬取"我去图书馆"座位编码
原文地址:http://fanjiajia.cn/2018/11/22/Python-%E7%88%AC%E5%8F%96%E2%80%9D%E6%88%91%E5%8E%BB%E5%9B%BE%E4 ...
- Flink之状态之状态存储 state backends
流计算中可能有各种方式来保存状态: 窗口操作 使用 了KV操作的函数 继承了CheckpointedFunction的函数 当开始做checkpointing的时候,状态会被持久化到checkpoin ...
- Anaconda使用入门
简介 Conda是一个开源的包.环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换 Anaconda包括Conda.Python以及一大堆安装好的工具包,比如: ...
- 【bzoj1263】[SCOI2006]整数划分 高精度
题目描述 从文件中读入一个正整数n(10≤n≤31000).要求将n写成若干个正整数之和,并且使这些正整数的乘积最大. 例如,n=13,则当n表示为4+3+3+3(或2+2+3+3+3)时,乘积=10 ...
- BZOJ 3319 黑白树 并查集+线段树
这这这这这这什么毒瘤题!!!!!!!!!!!!!!!!!!!!!!!!!!!! 卡LCT(优秀的LCT由于是均摊本身就带着2,3的常数在,而且这道题对于LCT标记十分难维护,又得乘上4,5然后就炸了) ...
- HTML5用canvas绘制五星红旗
在HTML5一览中,我们提到html 5被冠以很多高帽,其中最高的一顶.备受争议的就是"Flash杀手".IT评论界老喜欢用这个词了,杀手无处不在.不管是不是杀手,HTML 5引进 ...
- bulk_insert_buffer_size and InnoDB
Q: I read the following on this page http://dev.mysql.com/doc/mysql/en/server-system-variables.html ...
- 小K的农场
小K的农场 题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b至少多种植了 ...
- HDU3038:How Many Answers Are Wrong(带权并查集)
How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- 在xml文件中引入带有@Configuration的Java类
在xml引入带有@Configuration的Java类,就是把这个带有@Configuration的Java类,当做一个普通的的类用<bean>标签引入: 核心代码如下: @Config ...