歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android使用HttpURLConnection下載圖片

Android使用HttpURLConnection下載圖片

日期:2017/3/1 9:44:20   编辑:Linux編程

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

URI (uniform resource identifier)統一資源標志符;

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

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

目錄結構

效果圖

--------------------------------------分割線 --------------------------------------

本文完整Demo下載

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2014年資料/5月/17日/Android使用HttpURLConnection下載圖片

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

--------------------------------------分割線 --------------------------------------

Adroid 4.0 HttpURLConnection拋異常解決方法 http://www.linuxidc.com/Linux/2013-03/81085.htm

node.js+Android(使用HttpURLConnection和HttpClient)實現文件上傳 http://www.linuxidc.com/Linux/2012-02/53532p2.htm

在Android上用HttpURLConnection獲取網頁內容 http://www.linuxidc.com/Linux/2011-08/41211.htm

關鍵代碼

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處理。

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);
}

}

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

網絡上一個不錯的資源:http://square.github.io/okhttp/

OkHttp是Square的一款產品,是一個Java的開源HTTP和SPDY客戶端開發包,支持Android。Android自帶的兩個HTTP框架(HttpURLConnection和HttpClient),在各種Android OS版本一直充斥著錯誤,可以使任何理智的開發者走向崩潰。不過幸運地是,OkHttp解決了這些問題。OkHttp是建立在HttpUrlConnection上,從Android代碼庫保持最新的修復,這意味著再也沒有與舊操作系統版本出現兼容性問題的噩夢

Ubuntu 14.04 x64配置Android 4.4 kitkat編譯環境的方法 http://www.linuxidc.com/Linux/2014-05/101148.htm

Ubuntu 12.04搭建Android開發環境 http://www.linuxidc.com/Linux/2012-09/69961.htm

Ubuntu 14.04 配置 Android SDK 開發環境 http://www.linuxidc.com/Linux/2014-05/101039.htm

64位Ubuntu 11.10下Android開發環境的搭建(JDK+Eclipse+ADT+Android SDK詳細) http://www.linuxidc.com/Linux/2013-06/85303.htm

Ubuntu 12.10 x64 安裝 Android SDK http://www.linuxidc.com/Linux/2013-03/82005.htm

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved