AsyncTask 工具类的简单使用day8android
//功能:界面有一个按钮 下载图片 点击该按钮 就下载图片 而后显示到该页面api
一、先在配置清单里 配置联网权限 1 -- 点击配置清单里的Permissions
2 -- 点击Add
3 -- 点击Uses Permission
4 -- 在右边下拉列表里找到INTERNET添加保存ide
二、在布局界面布局须要的控件
代码工具
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >布局
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/bt_download"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imageview"
android:text="下载图片"
android:onClick="downLoad"
/>this
</RelativeLayout>
----------------------url
三、MainActivity 类线程
代码code
public class MainActivity extends Activity {
private ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.image = (ImageView) this.findViewById(R.id.imageview);
}
//下载按钮 的事件监听
public void downLoad(View view){
String url = "http://litchiapi.jstv.com/Attachs/Top/11949/e650e0201de541d2ba91dca202b0fcfe.jpg";
//启动 MyAsyncTask 自定义的工具类
//this 当前类 execute方法 用来启动线程
new MyAsyncTask(this).execute(url);
}
//继承AsyncTask 类
//第一个参数 -- 可变 参数 -- 能够传入 多个String 类型 至关于 String[]
//第二个参数 -- 通常为Integer类型 -- 也能够传入多个Integer类型 至关于Integer[] 这里定义为Void 没有类型
//第二个参数 -- 用于onProgressUpdate方法 该方法主要是更新进度条xml
//第三个参数 -- doInBackground方法返回的类型 class MyAsyncTask extends AsyncTask<String, Void, byte[]>{ //android里定义好的进度对话框 ProgressDialog private ProgressDialog dialog; public MyAsyncTask(Context context) { //new 一个 下载 进度 对话框 dialog = new ProgressDialog(context); dialog.setTitle("图片下载"); dialog.setMessage("正在下载..."); } //在这里启动 下载对话框 @Override // 主线程运行, 在doInBackground以前执行 protected void onPreExecute() { super.onPreExecute(); //显示 下载进度 对话框 dialog.show(); } @Override // 子线程执行后台操做 protected byte[] doInBackground(String... params) { //实现联网 //使用阿帕奇 httpClient //接收传进来的 地址 String url = params[0]; //创建GET请求 HttpGet get = new HttpGet(url); //建立一个HttpClient 对象 HttpClient client = new DefaultHttpClient(); try { HttpResponse response = client.execute(get); //成功响应 if(response.getStatusLine().getStatusCode() == 200){ //获取下载数据 HttpEntity entity = response.getEntity(); //返回下载的数据 return EntityUtils.toByteArray(entity); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } //得到 下载 返回的结果 @Override //在主线程执行UI的更新操做 -- 在doInBackground方法执行完后执行 protected void onPostExecute(byte[] result) { if(result != null){ Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length); image.setImageBitmap(bitmap); }else{ Toast.makeText(MainActivity.this, "下载失败!", Toast.LENGTH_SHORT).show(); } //关闭下载进度 对话框 dialog.dismiss(); } }}