package com.example.chen.task;

import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import com.squareup.picasso.Picasso;

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class MainActivity extends AppCompatActivity {
    Button  button;
    ProgressDialog progressBar;
    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button)findViewById(R.id.button);
        imageView=(ImageView)findViewById(R.id.imageView);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new GetImage().execute("http://content.teldap.tw/index/files/image/epaper/34/bio.JPG");
               // Picasso.with(MainActivity.this).load("http://www.google.com/logos/2013/estonia_independence_day_2013-1057005.3-hp.jpg").into(imageView);
            }
        });
    }
    private class GetImage extends AsyncTask<String , Integer , Bitmap> {

        @Override
        protected void onPreExecute() {
            //執行前 設定可以在這邊設定
            super.onPreExecute();

           progressBar = new ProgressDialog(MainActivity.this);
            progressBar.setMessage("Loading...");
            progressBar.setCancelable(false);
            progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressBar.show();
        }

        @Override
        protected Bitmap doInBackground(String... params) {
            //執行中 在背景做事情

            int count =params.length;


            Bitmap mybitmap;
                try {
                    Log.i("mytest",params[0]);
                   /* URL url = new URL(params[0]);
                    HttpURLConnection con = (HttpURLConnection)url.openConnection();
                    InputStream is = con.getInputStream();
                    bitmap2 = BitmapFactory.decodeStream(is );
                    */
                    URL aURL = new URL(params[0]);
                    URLConnection conn = aURL.openConnection();
                    conn.connect();
                    InputStream is = conn.getInputStream();
                    BufferedInputStream bis = new BufferedInputStream(is);
                    mybitmap = BitmapFactory.decodeStream(bis);
                    bis.close();
                    is.close();
                    if (null != mybitmap)
                        return mybitmap;
                } catch (Exception  e) {
                    e.printStackTrace();
                }
            for (int i = 0; i < count; i++) {
                publishProgress((int) ((i / (float) count) * 100));
                // Escape early if cancel() is called

            }


            publishProgress(100);
            //最後達到100%
            return null;
        }
        @Override
        protected void onProgressUpdate(Integer... values) {
            //執行中 可以在這邊告知使用者進度
            super.onProgressUpdate(values);
           progressBar.setProgress(values[0]);
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            //執行後 完成背景任務
           progressBar.dismiss();
            //當完成的時候,把進度條消失
            imageView.setImageBitmap( bitmap);
        }
    }
}

參考資料:

1.[Android] AsyncTask - 非同步任務