AsyncTask实现下载网络图片

最近一直都在学习数据结构,有点无聊,突然想起很久没学过Android了,因此上网找下自己很久之前没接触过的AsyncTask这个类,这个类其实很早就想学习了,呵呵。下面是自己从网上左拼右拼的代码,可以实现从网络上下载图片,显示下载进度,当下载完就把图片显示出来。好了,下面是所有代码:

package love.fs;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.ByteArrayBuffer;

import android.R.string;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class Asynctask_TestActivity extends Activity {
ProgressBar pb;
Button button;
Button cancelButton;
Button pauseButton;
Button go_onButton;
ImageView iv;
TextView tv;
boolean isCancel = true;
int count = 0;
int ch = -1;
MyAsynctask myTask = new MyAsynctask();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb = (ProgressBar) findViewById(R.id.progressBar);
pb.setMax(100);
button = (Button) findViewById(R.id.bt);
iv = (ImageView) findViewById(R.id.iv);
tv = (TextView) findViewById(R.id.tv);
button.setOnClickListener(new OnClickListener() {// 立即下载按钮

public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("点击了按钮");
isCancel = false;
myTask = new MyAsynctask();
myTask.execute("http://imgstatic.baidu.com/img/image/shouye/yiping2.jpg");
}
});

cancelButton = (Button) findViewById(R.id.cancel);// 取消下载按钮
cancelButton.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
// TODO Auto-generated method stub
isCancel = true;
iv.setImageBitmap(null);
pb.setProgress(0);
count = 0;
tv.setText("当前并没有下载");
myTask.cancel(false);
Toast.makeText(Asynctask_TestActivity.this, "取消了下载",
Toast.LENGTH_LONG).show();
}
});
}



class MyAsynctask extends AsyncTask {
Bitmap bm = null;

@Override
protected Bitmap doInBackground(String... params) {
// TODO Auto-generated method stub
HttpClient hc = new DefaultHttpClient();
HttpGet hg = new HttpGet(params[0]);
byte[] buffer = new byte[128];
String s = null;
InputStream is = null;
try {
HttpResponse hr = hc.execute(hg);
HttpEntity entity = hr.getEntity();
long length = entity.getContentLength();
System.out.println("文件长度为" + length);
is = entity.getContent();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// bm = BitmapFactory.decodeStream(hr.getEntity().getContent());
if (length > 0) {
while ((ch = is.read(buffer)) != -1 && !isCancel) {
baos.write(buffer, 0, ch);
count += ch;
System.out.println("当前下载了" + count);
publishProgress((int) ((count / (float) length) * 100));
Thread.sleep(100);
}
bm = BitmapFactory.decodeByteArray(baos.toByteArray(), 0,
baos.toByteArray().length);
is.close();
}

} catch (Exception e) {
e.printStackTrace();
}
return bm;
}

@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
}

@Override
protected void onPostExecute(Bitmap result) {// doInBackground执行完之后执行这里
// TODO Auto-generated method stub
super.onPostExecute(result);
if (result != null) {
// iv.setImageBitmap(result);
Toast.makeText(Asynctask_TestActivity.this, "下载成功!",
Toast.LENGTH_LONG).show();
iv.setImageBitmap(bm);

} else {
Toast.makeText(Asynctask_TestActivity.this, "下载失败!",
Toast.LENGTH_LONG).show();
}

}

@Override
protected void onPreExecute() {// 点击下载按钮前 什么都没有
// TODO Auto-generated method stub
super.onPreExecute();
pb.setProgress(0);
tv.setText("当前并无下载");
iv.setImageBitmap(null);
}

@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
tv.setText("当前下载进度为" + values[0] + "%");
pb.setProgress(values[0]);
}

}
}
运行结果如下:
AsyncTask实现下载网络图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值