Android使用HttpURLConnection下载图片

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

URI (uniform resource identifier)统一资源标志符;

URL(uniform resource location )统一资源定位符(或统一资源定位器);

可以理解成URL是URI的子集,URI是一抽象的标识符,URL可以理解成具体的标识符;只要是网络上的资源就能找到唯一的URL。

目录结构

Android使用HttpURLConnection下载图片

效果图

Android使用HttpURLConnection下载图片

--------------------------------------分割线 --------------------------------------

本文完整Demo下载

免费下载地址在

用户名与密码都是

具体下载目录在 /2014年资料/5月/17日/Android使用HttpURLConnection下载图片

下载方法见

--------------------------------------分割线 --------------------------------------

Adroid 4.0 HttpURLConnection抛异常解决方法

node.js+Android(使用HttpURLConnection和HttpClient)实现文件上传 

在Android上用HttpURLConnection获取网页内容 

关键代码
 
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
  *            如:%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://www.heiqu.com/c281540ffa4d455a7fee9aceb08b40e1.html