Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android使用HttpURLConnection下載圖片

Android使用HttpURLConnection下載圖片

編輯:關於Android編程

講到http就必需要了解URI和URL

URI (uniform resource identifier)統一資源標志符;
URL(uniform resource location )統一資源定位符(或統一資源定位器);

可以理解成URL是URI的子集,URI是一抽象的標識符,URL可以理解成具體的標識符;只要是網絡上的資源就能找到唯一的URL。

目錄結構

\

效果圖<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20140511/2014051109214770.jpg" alt="\">

關鍵代碼

HttpUtils.java類

package com.dzt.downloadimage.utils;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

/**
 * http工具類 http可以使用HttpURLConnection或HttpClient
 * 
 * @author Administrator
 * @date 2014.05.10
 * @version V1.0
 */
public class HttpUtils {

	/**
	 * 獲取網絡圖片
	 * 
	 * @param urlString
	 *            如:http://f.hiphotos.baidu.com/image/w%3D2048/sign=3
	 *            b06d28fc91349547e1eef6462769358
	 *            /d000baa1cd11728b22c9e62ccafcc3cec2fd2cd3.jpg
	 * @return
	 * @date 2014.05.10
	 */
	public static Bitmap getNetWorkBitmap(String urlString) {
		URL imgUrl = null;
		Bitmap bitmap = null;
		try {
			imgUrl = new URL(urlString);
			// 使用HttpURLConnection打開連接
			HttpURLConnection urlConn = (HttpURLConnection) imgUrl
					.openConnection();
			urlConn.setDoInput(true);
			urlConn.connect();
			// 將得到的數據轉化成InputStream
			InputStream is = urlConn.getInputStream();
			// 將InputStream轉換成Bitmap
			bitmap = BitmapFactory.decodeStream(is);
			is.close();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			System.out.println("[getNetWorkBitmap->]MalformedURLException");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("[getNetWorkBitmap->]IOException");
			e.printStackTrace();
		}
		return bitmap;
	}
}
使用到網絡必需要添加權限和要有網絡,否則下載失敗

下載屬於耗時的操作,如果放在UI線程出容易出現ANR;所以Android4.0之後對網絡的操作不能放在UI線程,在這裡我把下載放在AsyncTask處理。

class downloadImageTask extends AsyncTask {

		@Override
		protected Boolean doInBackground(String... params) {
			// TODO Auto-generated method stub
			System.out.println("[downloadImageTask->]doInBackground "
					+ params[0]);
			mDownloadImage = HttpUtils.getNetWorkBitmap(params[0]);
			return true;
		}

		// 下載完成回調
		@Override
		protected void onPostExecute(Boolean result) {
			// TODO Auto-generated method stub
			image.setImageBitmap(mDownloadImage);
			System.out.println("result = " + result);
			super.onPostExecute(result);
		}

		// 更新進度回調
		@Override
		protected void onProgressUpdate(Integer... values) {
			// TODO Auto-generated method stub
			super.onProgressUpdate(values);
		}

	}
在onPostExecute和onProgressUpdate可以方便我們更新UI,當然也可以開一個線程處理,使用AsyncTask就更方便。

完整Demo:http://download.csdn.net/detail/deng0zhaotai/7326005


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved