Android使用HttpURLConnection下載圖片
阿新 • • 發佈:2019-01-25
講到http就必需要了解URI和URL
URI (uniform resource identifier)統一資源標誌符;
URL(uniform resource location )統一資源定位符(或統一資源定位器);
可以理解成URL是URI的子集,URI是一抽象的識別符號,URL可以理解成具體的識別符號;只要是網路上的資源就能找到唯一的URL。
目錄結構
效果圖
關鍵程式碼
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; } }
<uses-permission android:name="android.permission.INTERNET" />
下載屬於耗時的操作,如果放在UI執行緒出容易出現ANR;所以Android4.0之後對網路的操作不能放在UI執行緒,在這裡我把下載放在AsyncTask處理。
在onPostExecute和onProgressUpdate可以方便我們更新UI,當然也可以開一個執行緒處理,使用AsyncTask就更方便。class downloadImageTask extends AsyncTask<String, Integer, Boolean> { @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); } }
完整Demo:http://download.csdn.net/detail/deng0zhaotai/7326005
OkHttp是Square的一款產品,是一個Java的開源HTTP和SPDY客戶端開發包,支援Android。Android自帶的兩個HTTP框架(HttpURLConnection和HttpClient),在各種Android OS版本一直充斥著錯誤,可以使任何理智的開發者走向崩潰。不過幸運地是,OkHttp解決了這些問題。OkHttp是建立在HttpUrlConnection上,從Android程式碼庫保持最新的修復,這意味著再也沒有與舊作業系統版本出現相容性問題的噩夢