package com.lixiangjian.android_asynctask;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
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.EntityUtils;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
/**
* AsyncTask基本用法
* 使用AsncTask下载图片
*/
public class MainActivity extends Activity {
javascript:void(0);
//1.声明并初始化组件
private ImageView imageView;
private Button button;
private String imgUrl = "http://img1.bdstatic.com/static/home/widget/search_box_home/logo/home_white_logo_0ddf152.png";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView)findViewById(R.id.imageView);
button = (Button)findViewById(R.id.button);
//2.设置Button的监听事件
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//3.执行异步任务,下载图片
new MyAsyncTask().execute(imgUrl);//执行异步任务
}
});
}
/**
* 三个参数:
* 参数1:Params:请求参数的类型
* 参数2:Progress:当前AsyncTask在后台操作时完成的进度的类型
* 参数3:Result:请求结果的数据类型
* 如果没有类型,就是要Void代替
* @author pk
*
*/
class MyAsyncTask extends AsyncTask<String, Void, byte[]>{
/**
* 在AsyncTask执行之前回调的方法,此方法是运行在UI线程中的
* 一般可以在此方法中做一些初始化的操作,初始化进度条
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.i("TAG", Thread.currentThread().getName()+"--onPreExecute--");
}
/**
* 执行完onPreExecute()之后回调的方法,执行耗时的操作,运行在子线程中
* String... params:可变参数,类型和泛型中第一个参数的类型一致
* byte[] :返回类型和泛型中第三个参数类型一致
*/
@Override
protected byte[] doInBackground(String... params) {//String[] params
byte[] result = null;
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(params[0]);//params就是调用execute(imgUrl);传递的参数
try {
HttpResponse httpResponse = httpClient.execute(httpGet);
if(httpResponse.getStatusLine().getStatusCode() == 200){
HttpEntity entity = httpResponse.getEntity();
result = EntityUtils.toByteArray(entity);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 运行在主线程中,更新进度
*/
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
/**
* 是在doInBackground执行之后回调的方法,并且会把doInBackground返回的结果传递给onPostExecute方法
* 此方法是运行在UI线程中,通常在此方法中处理数据,更新UI界面
* byte[] result
*/
@Override
protected void onPostExecute(byte[] result) {
super.onPostExecute(result);
if(result !=null && result.length !=0){
//将byte[]转成Bitmap类型
Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
//将图片显示在imageView组件上
imageView.setImageBitmap(bitmap);
}else{
Log.i("TAG", "下载失败");
}
}
}
}
AsyncTask基本用法
最新推荐文章于 2022-09-11 18:47:24 发布