AsyncTask异步任务

package com.example.asynctask;
/* 功能:点击按钮后开始下载设置网页中的图片
 * 利用了异步任务的功能。
 * 2015-1-26,视频6.1,6.2
 * */
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.EntityUtils;

import android.app.Activity;
import android.app.ProgressDialog;
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;

public class MainActivity extends Activity {
	private Button button;
	private ImageView imageView;
	// 在清单中加Permission授权访问Internet
	// 添加网络图片的路径。
	private final String IMAGE_PATH = "http://www.baidu.com/img/bdlogo.png";
	//如果是本地要加IP和端口及目录。
	private ProgressDialog dialog;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) this.findViewById(R.id.button1);
		dialog = new ProgressDialog(this);
		dialog.setTitle("提示");
		dialog.setCancelable(false);
		dialog.setMessage("正在下载图片,请稍候……");
		imageView = (ImageView) this.findViewById(R.id.imageView1);
		button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//执行异步任务。
				new  MyTask().execute(IMAGE_PATH);
			}
		});
	}

	/*下面是异步任务MyTask。
	 * 一步任务执行下载网上图片的控件。 这个是个抽象类必定有一个抽象的方法。是doInBackground,这个异步任务戳必须要做的。
	 */
	public class MyTask extends AsyncTask<String, Integer, byte[]> {
		// 参数1是异步任务需要执行的东西,访问网络的网址。第二个参数是刻度的单位类型是integer,第三个参数是结果,后台执行的结果,返回图片是Byte[]字节数组
		// 没有参数时候用Void型。
		@Override
		protected void onPreExecute() {
			// 若没有提示框,这个步骤不用调。如果不需要把得到的结果给UI,最后一个步骤不能调。不需要更新进度条就不用步骤三
			//首先设置dialog显示。
			super.onPreExecute();
			dialog.show();
		};

		protected byte[] doInBackground(String... params) {
			// TODO Auto-generated method stub 这是步骤二
			// 会上面一个步骤执行后会立即执行,这是一个后台操作,这个参数是表示要执行的路径。对应于String。会计算出来以返回给最后一个步骤
			// 在这个步骤中可以用publishProgess把进度发布给UI线程给第三个步骤。有算法。
			//后台执行的操作,返回结果给onPostExecute
			HttpClient httpClient = new DefaultHttpClient();
			HttpGet httpGet = new HttpGet(params[0]);
			byte[] result = null;
			try {
				HttpResponse httpResponse = httpClient.execute(httpGet);
				if (httpResponse.getStatusLine().getStatusCode() == 200) {
					result = EntityUtils.toByteArray(httpResponse.getEntity());
				}
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			} finally {
				httpClient.getConnectionManager().shutdown();
			}

			return result;
		}
		@Override
		protected void onPostExecute(byte[] result) {
			// TODO Auto-generated method stub
			//取得结果,在这里更新UI
			super.onPostExecute(result);
			Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
			imageView.setImageBitmap(bitmap);
			dialog.dismiss();
		}
	}
}

详细还是看注释吧,多练才可以学得。

运行没问题,给图片也没什么意义了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值