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重写的方法中,参数有....指的都是不止一个数据