AsyncTask 工具类的简单使用day8


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();  } }}

相关文章
相关标签/搜索