歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 異步加載圖片-AsyncTask

Android 異步加載圖片-AsyncTask

日期:2017/3/1 11:16:35   编辑:Linux編程

AsyncTask定義了三種泛型類型 Params,Progress和Result。

?Params 啟動任務執行的輸入參數,比如HTTP請求的URL。

?Progress 後台任務執行的百分比。

?Result 後台執行任務最終返回的結果,比如String。

AsyncTask定義了三種泛型類型 Params,Progress和Result。

?Params 啟動任務執行的輸入參數,比如HTTP請求的URL。

?Progress 後台任務執行的百分比。

?Result 後台執行任務最終返回的結果,比如String。view plaincopy to clipboardprint?

一切說明都在代碼中......................................................

Activity

  1. /*
  2. * Android 異步任務AsyncTask
  3. * AsyncTask定義了三種泛型類,Params,Progress,Result
  4. */
  5. package rw.ansync;
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. import android.widget.ImageView;
  13. import android.widget.ProgressBar;
  14. public class AsynaTask_TestActivity extends Activity {
  15. /** Called when the activity is first created. */
  16. private EditText editText;
  17. private Button button;
  18. private ProgressBar progressBar;
  19. private ImageView imageView;
  20. private static final String URL_STRING="http://photocdn.sohu.com/20110927/Img320705637.jpg";
  21. @Override
  22. public void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.main);
  25. editText=(EditText) findViewById(R.id.editText1);
  26. editText.setText(URL_STRING);
  27. button=(Button) findViewById(R.id.button1);
  28. progressBar=(ProgressBar) findViewById(R.id.progressBar1);
  29. imageView=(ImageView) findViewById(R.id.imageView1);
  30. button.setOnClickListener(new ButtonListener());
  31. }
  32. class ButtonListener implements OnClickListener{
  33. @Override
  34. public void onClick(View v) {
  35. // TODO Auto-generated method stub
  36. MyAsynaTask mTask=new MyAsynaTask(imageView, progressBar,button);
  37. mTask.execute(URL_STRING);
  38. }
  39. }
  40. }

MyAsynaTask.java

  1. package rw.ansync;
  2. import java.io.InputStream;
  3. import java.net.HttpURLConnection;
  4. import java.net.URL;
  5. import android.R.integer;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;
  8. import android.os.AsyncTask;
  9. import android.widget.Button;
  10. import android.widget.ImageView;
  11. import android.widget.ProgressBar;
  12. public class MyAsynaTask extends AsyncTask<String, Integer, Bitmap>{
  13. private ImageView imageView;
  14. private ProgressBar progressBar;
  15. private Button button;
  16. public MyAsynaTask( ImageView imageView,
  17. ProgressBar progressBar,Button button) {
  18. super();
  19. this.imageView = imageView;
  20. this.progressBar = progressBar;
  21. this.button=button;
  22. }
  23. @Override
  24. protected void onPreExecute() {
  25. // TODO Auto-generated method stub
  26. /*
  27. * 改方法在執行實際的後台操作時被UI線程調用,可以在該方法中做一些准備工作,比如
  28. * Toast.makeText(context, "准備下載", Toast.LENGTH_LONG).show();
  29. */
  30. super.onPreExecute();
  31. }
  32. @Override
  33. protected Bitmap doInBackground(String... params) {//輸入編變長的可變參數 和UI線程中的Asyna.execute()對應
  34. // TODO Auto-generated method stub
  35. /*
  36. * 該方法在OnpreExecute執行以後馬上執行,改方法執行在後台線程當中,負責耗時的計算,可以調用publishProcess方法來實時更新任務進度
  37. */
  38. Bitmap bitmap=null;
  39. try {
  40. URL url=new URL(params[0]);
  41. HttpURLConnection connection=(HttpURLConnection) url.openConnection();
  42. connection.setDoInput(true);
  43. connection.connect();
  44. progressBar.setMax(connection.getContentLength());
  45. InputStream inputStream=connection.getInputStream();
  46. bitmap=BitmapFactory.decodeStream(inputStream);
  47. // inputStream.close();
  48. /*
  49. * 以下完全為了演示進度條,如果為了顯示進度條可以把這個去掉
  50. */
  51. /*
  52. byte []buf=new byte[1024*4];
  53. inputStream=connection.getInputStream();
  54. int len=0;
  55. while ((inputStream.read(buf))!=-1) {
  56. len+=buf.length;
  57. publishProgress(len);
  58. }
  59. */
  60. inputStream.close();
  61. } catch (Exception e) {
  62. // TODO: handle exception
  63. }
  64. return bitmap;
  65. }
  66. @Override
  67. protected void onProgressUpdate(Integer... values) {
  68. // TODO Auto-generated method stub
  69. /*
  70. * 當publichProcess 呗調用以後,UI線程將調用這個有方法在界面上展示任務的情況,比如一個額進度條。這裡是更新進度條
  71. */
  72. int value=values[0];
  73. progressBar.setProgress(value);
  74. super.onProgressUpdate(values);
  75. }
  76. @Override
  77. protected void onPostExecute(Bitmap result) {
  78. // TODO Auto-generated method stub
  79. /*
  80. * 在doInbackground執行完成以後,onPostExecute將被調用,後台的結果將返回給UI線程,將獲得圖片顯示出來
  81. */
  82. imageView.setImageBitmap(result);
  83. button.setText("下載完成");
  84. super.onPostExecute(result);
  85. }
  86. }

加上權限<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Copyright © Linux教程網 All Rights Reserved