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

相關文章
相關標籤/搜索