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