AsyncTask基本用法

来源:互联网 发布:七天网络查分登录 编辑:程序博客网 时间:2024/06/06 11:40
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";@Overrideprotected 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() {@Overridepublic 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线程中的 * 一般可以在此方法中做一些初始化的操作,初始化进度条 */@Overrideprotected void onPreExecute() {super.onPreExecute();Log.i("TAG", Thread.currentThread().getName()+"--onPreExecute--");}/** * 执行完onPreExecute()之后回调的方法,执行耗时的操作,运行在子线程中 * String... params:可变参数,类型和泛型中第一个参数的类型一致 * byte[] :返回类型和泛型中第三个参数类型一致 */@Overrideprotected byte[] doInBackground(String... params) {//String[] paramsbyte[] 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;}/** * 运行在主线程中,更新进度 */@Overrideprotected void onProgressUpdate(Void... values) {super.onProgressUpdate(values);}/** * 是在doInBackground执行之后回调的方法,并且会把doInBackground返回的结果传递给onPostExecute方法 * 此方法是运行在UI线程中,通常在此方法中处理数据,更新UI界面 * byte[] result */@Overrideprotected 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", "下载失败");}}}}

1 0
原创粉丝点击