AsycnTask的基本操作

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
	//注意的点:
	//	1.启动AsyncTask的时候三个数据类型的设置怎么弄:execute(...)传递的参数在自定义的AsyncTask中的doInBackground中可以获取
	//  2.doInBackground这个方法怎么获取启动者的数据.
	//  3.使用URL解析网络地址的方法
	//  4.URLConnection是所有表示应用程序与URL之间通信连接的类的父类
	private ImageView iv;
	private ProgressBar pb;
	private String url="http://www.5442.com/showpic.html?http://pic1.5442.com:82/2013/0529/01/01.jpg";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		iv=(ImageView) findViewById(R.id.iv);
		pb=(ProgressBar) findViewById(R.id.pb);
		//显示加载条
		pb.setVisibility(View.VISIBLE);
		
		//AsyncTask类似于线程,需要使用方法启动触发,execute()传递的参数在doInBackground中的形式参数可以获取
        new MyAsyncTask().execute(url);//启动AsyncTask
	}
	
	//自定义AsyncTask 三个参数:参数一:刚开始传递的数据(这个示例传递了网络图片的地址)   参数二:这个是进度数据   参数三:这个执行到最后返回的数据类型
	public class MyAsyncTask extends AsyncTask<String, Void, Bitmap>{
		//所有耗时的操作都要这个方法中运行,这个方法是一定要重写的,注意这个方法的参数params相当于一个数组,你可以安装顺序取出启动者传递的数据
		@Override
		protected Bitmap doInBackground(String... params) {
			// TODO Auto-generated method stub
			Bitmap bitmap=null;
			String dataurl = params[0];//获取的方法类似数组
			try {
				//使用URL的构造方法解析网络地址
				URL url = new URL(dataurl);
				
				//URLConnection是所有表示应用程序与URL之间通信连接的类的父类
				URLConnection openConnection = url.openConnection();
				
				//通过URLConnection的对象获取一个输入流对象
				InputStream intputStream = openConnection.getInputStream();
				
				//你也可以把InputStream用一个BufferedInputStream承载,效率比较高
				BufferedInputStream bis=new BufferedInputStream(intputStream);
				
				//使用Bitmap工厂解析一个流对象,得到一个Bitmap
				bitmap = BitmapFactory.decodeStream(bis);
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
//			publishProgress(values)
			return bitmap;
		}
		//这是UI更新的方法,会在doInBackground这个方法执行之后调用
		@Override
		protected void onPostExecute(Bitmap result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);
			//先把加载控件隐藏之后在显示图片控件
			pb.setVisibility(View.GONE);
			iv.setImageBitmap(result);
		}
		//这个方法是在进行耗时操作之前运行的,也就是doInBackground这个方法之前,可以进行一些初始化操作
		@Override
		protected void onPreExecute() {
			// TODO Auto-generated method stub
			super.onPreExecute();
		}
		//这个方法doInBackground在运行的时候调用的方法,通过publishProgress()方法传递数据给当前方法,主要用于显示进度
		@Override
		protected void onProgressUpdate(Void... values) {
			// TODO Auto-generated method stub
			super.onProgressUpdate(values);
		}
	}
}


注意的点:
1.启动AsyncTask的时候三个数据类型的设置怎么弄:execute(...)传递的参数在自定义的AsyncTask中的doInBackground中可以获取
2.doInBackground这个方法怎么获取启动者的数据.
3.使用URL解析网络地址的方法
4.URLConnection是所有表示应用程序与URL之间通信连接的类的父类
         5.AsyncTask重写的方法中,参数有....指的都是不止一个数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值