1. 程式人生 > >Android 使用URL讀取網路圖片資源

Android 使用URL讀取網路圖片資源

MainActivity裡面在適當的位置呼叫了new HttpImageDownload((ImageView) findViewById(R.id.imageView)).execute();

其中imageView是activity_main.xml上面的ImageView控制元件的id

HttpImageDownload是我自定義的類,繼承了AsyncTask。

execute是繼承自AsyncTask的方法,作用是啟動AsyncTask類中doInBackground方法。

之所以要自定義一個類,再繼承自AsyncTask,是因為doInBackground方法會非同步執行,而關於網路的操作是不能在UI執行緒執行的。

如果覺得這樣麻煩,採用Thread類的start方法也是可以的。

new Thread(new Runnable() {
                @Override
                public void run() {
                    
                }
            }).start();
接下來就是HttpImageDownload類的具體實現
public class HttpImageDownload extends AsyncTask {

    private ImageView mImageView;

    public HttpImageDownload(ImageView imageView)
    {
        mImageView = imageView;
    }

    @Override
    protected Object doInBackground(Object[] params) {

        try {
            // 建立一個URL
            URL url = new URL("http://ww4.sinaimg.cn/large/6592c2e0jw1eqnjtyr98ej20f00qot9t.jpg");

            // 從URL獲取對應資源的 InputStream
            InputStream inputStream = url.openStream();
            // 用inputStream來初始化一個Bitmap 雖然此處是Bitmap,但是URL不一定非得是Bitmap
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            // 關閉 InputStream
            inputStream.close();

            return bitmap;
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Object o) {
        // 此處的形參o,是doInBackground的返回值
        mImageView.setImageBitmap((Bitmap)o);
    }
}
這裡的URL是一張小s的照片,最後,記得加上
<uses-permission android:name="android.permission.INTERNET"/>