Android 異步加載圖片-AsyncTask

fmms 12年前發布 | 41K 次閱讀 Android Android開發 移動開發

AsyncTask定義了三種泛型類型 Params,Progress和Result。
    ?Params 啟動任務執行的輸入參數,比如HTTP請求的URL。
    ?Progress 后臺任務執行的百分比。
    ?Result 后臺執行任務最終返回的結果,比如String。
Activity

/*

  • Android 異步任務AsyncTask
  • AsyncTask定義了三種泛型類,Params,Progress,Result */ package rw.ansync;

import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.ProgressBar;

public class AsynaTask_TestActivity extends Activity { /* Called when the activity is first created. / private EditText editText; private Button button; private ProgressBar progressBar; private ImageView imageView; private static final String URL_STRING="

    editText=(EditText) findViewById(R.id.editText1);
    editText.setText(URL_STRING);
    button=(Button) findViewById(R.id.button1);
    progressBar=(ProgressBar) findViewById(R.id.progressBar1);
    imageView=(ImageView) findViewById(R.id.imageView1);
    button.setOnClickListener(new ButtonListener());
}
class ButtonListener implements OnClickListener{

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
            MyAsynaTask mTask=new MyAsynaTask(imageView, progressBar,button);
            mTask.execute(URL_STRING);
    }

}


}</pre>MyAsynaTask.java

package rw.ansync;

import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL;

import android.R.integer; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.IInterface; import android.util.Log; import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar;

public class MyAsynaTask extends AsyncTask<STRING, bitmap="" integer,="">{

private ImageView imageView;
private ProgressBar progressBar;
private Button button;

public MyAsynaTask( ImageView imageView,
        ProgressBar progressBar,Button button) {
    super();
    this.imageView = imageView;
    this.progressBar = progressBar;
    this.button=button;
}


@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub

    /*
     * 改方法在執行實際的后臺操作時被UI線程調用,可以在該方法中做一些準備工作,比如
     *  Toast.makeText(context, "準備下載", Toast.LENGTH_LONG).show();
     */
    super.onPreExecute();
}

@Override
protected Bitmap doInBackground(String... params) {//輸入編變長的可變參數 和UI線程中的Asyna.execute()對應
    // TODO Auto-generated method stub
/*
 * 該方法在OnpreExecute執行以后馬上執行,改方法執行在后臺線程當中,負責耗時的計算,可以調用publishProcess方法來實時更新任務進度
 */
    Bitmap bitmap=null;
    try {
         URL url=new URL(params[0]);
         Log.i("------------->", url+"");
         HttpURLConnection connection=(HttpURLConnection) url.openConnection();

         connection.connect();
         int MAX=connection.getContentLength();
         progressBar.setMax(MAX);

         InputStream inputStream=connection.getInputStream();

         ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
         /*
          * 為了顯示進度條,每接受1024字節要求更新一次UI,為了看效果
          */
         byte []buf=new byte[1024];
         int len = 0;
         int processBarNum=0;
         while( (len=inputStream.read(buf))!=-1){
             outputStream.write(buf, 0, len);
             processBarNum+=len;

             publishProgress(processBarNum);//通知要更新processBar
         }
         bitmap=BitmapFactory.decodeByteArray(outputStream.toByteArray(),0, MAX);
         inputStream.close();

    } catch (Exception e) {
        // TODO: handle exception
    }
    return bitmap;
}

@Override
protected void onProgressUpdate(Integer... values) {
    // TODO Auto-generated method stub
    /*
     * 當publichProcess 唄調用以后,UI線程將調用這個有方法在界面上展示任務的情況,比如一個額進度條。這里是更新進度條
     */
    int value=values[0];
    progressBar.setProgress(value);
    super.onProgressUpdate(values);
}


@Override
protected void onPostExecute(Bitmap result) {
    // TODO Auto-generated method stub
    /*
     * 在doInbackground執行完成以后,onPostExecute將被調用,后臺的結果將返回給UI線程,將獲得圖片顯示出來
     */
    imageView.setImageBitmap(result);
    super.onPostExecute(result);
}


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

Android 異步加載圖片-AsyncTask Android 異步加載圖片-AsyncTask

轉自:
http://blog.csdn.net/rwyz1314/article/details/6841639

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!