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 ...
随机推荐
- Configuring Dojo with dojoConfig - The Dojo Toolkit
转载自Dojo官网 Configuring Dojo with dojoConfig The dojoConfig object (formerly djConfig) allows you to s ...
- [Java文件操作] 为文本文件添加行号
[思路]将文件中的内容按行读取存入一个字符串中,在输出时再为每一行加上行号. import java.io.*; public class Text { private String strFinal ...
- ps学习笔记(二)
1)选择所有图层: Ctrl+Alt+A2)查找层:ctrl+alt+shift+f,需要在层面板输入查找层名,可自动查找层:3)隔离层:可将选择图层,更改为隔离,只对选择的层编辑:注:图层面板中有一 ...
- P1419 寻找段落
题目描述 给定一个长度为n的序列a_i,定义a[i]为第i个元素的价值.现在需要找出序列中最有价值的“段落”.段落的定义是长度在[S,T]之间的连续序列.最有价值段落是指平均值最大的段落, 段落的平均 ...
- NS产品演进
NS产品演进 Citrix产品体系================ Citrix产品类别================ NS产品演进================ 产品联系方式========== ...
- 如何用JavaScript做一个可拖动的div层
可拖动的层在Web设计中用处很多,比如在某些需要自定义风格布局的应用中,控件就需要拖动操作,下面介绍一个,希望可以满足你的需求,顺便学习一下可拖动的层是如何实现的. 下面是效果演示: 这个DIV可以移 ...
- SICAU-OJ: 第k小
第k小 题意: 给出一个长度不超过5000的字符串,然后让你找出第K小的字串(1<=K<=5).重复的串大小相等. 题解: 这里我们知道某些串的前缀是肯定小于等于其本身的. 那么长度为5的 ...
- 生产服务器环境最小化安装后Centos 6.5优化配置备忘
生产服务器环境最小化安装后 Centos 6.5优化配置备忘 本文 centos 6.5 优化 的项有18处,列表如下: 1.centos6.5最小化安装后启动网卡 2.ifconfig查询IP进行S ...
- mycat 管理MySQL5.7主从搭建
1.首先安装MySQL ab: 192.168.6.163 master 192.168.6.167 slave master: vi /etc/opt/rh/rh-mysql57/my.cnf.d/ ...
- win7---虚拟wifi无法启动承载网络
转载自:http://nbbbs.zol.com.cn/40/32108_397955.html 解决方案:控制面板→硬件和声音→电源选项→更改计划设置→更改高级电源设置→无线适配器设置→节能模式,改 ...