Android使用HttpURLConnection下载图片

讲到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处理。

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就更方便。

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

Android使用HttpURLConnection下载图片,布布扣,bubuko.com

时间: 2024-10-05 02:55:58

Android使用HttpURLConnection下载图片的相关文章

Android采用HttpClient下载图片

在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient是个非常不错的开源框架(org.appache.http),封装了訪问http的请求头,參数,内容体.响应等等,使用起来更方面更强大. HttpURLConnection是java的标准类,能够实现简单的基于URL请求.响应功能,什么都没封装.用起来太原始.比方重訪问的自己定义,以及一些高级功能等.

Android使用HttpClient下载图片

在前一章中讲的是Android使用HttpURLConnection下载图片,这一章使用HttpClient下载图片 HttpURLConnection与HttpClient的区别: HttpClient是个很不错的开源框架(org.appache.http),封装了访问http的请求头,参数,内容体,响应等等,使用起来更方面更强大. HttpURLConnection是java的标准类,可以实现简单的基于URL请求.响应功能,什么都没封装,用起来太原始,比如重访问的自定义,以及一些高级功能等.

android通过url下载图片并实现fragment与activity的图片交互

增加了图片放大缩小功能,一共用到三个类.MainActivity仅作为添加fragment用,其全部代码如: package com.example.ex_1213_mypic; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentT

Android 本地/网路下载图片实现放大缩小

 Android 本地加载/网路下载图片实现放大缩小拖拉效果,自定义控件. package com.example.ImageViewCustom; import android.app.Activity; import android.os.Bundle; import com.example.ImageViewCustom.CustomControl.MImageView; public class MyActivity extends Activity { MImageView mImag

Android异步批量下载图片并缓存

前言 本文引自:http://www.xycoding.com/articles/2014/07/29/android-async-images-download/,作者不详 ImagesDownLoad源码下载:DEMO 接触android开发不久,近段时间需实现一个批量下载图片并显示的小功能.在网上搜索了一圈,发现国内外网上异步加载的例子太多太杂,要么是加载大图decode时报OOM异常,要么内存急剧上升不稳定.所以在前辈们的基础上,做了一些优化,特共享出来,欢迎大家指正.这里主要参见了以下

通过HttpURLConnection下载图片到本地(一)

一.背景说明 现在我做的系统中,需要有一个下载附件的功能,其实就是下载图片到本地中.相应的图片保存在多媒体系统中,我们只能拿到它的资源地址(url),而不是真实的文件. 这里记录的是下载单个图片. 二.代码 1.html /* * 下载选中的附件 */ $("#merchantApproval-annes-center-tb .downloadButton").click(function(){ //获取选中的行,此行包含了附件的相关信息 var row = $("#merc

HttpURLConnection下载图片的两种方式

public class MainActivity extends AppCompatActivity { private ImageView iv; private String imageurl = "http://img06.tooopen.com/images/20161106/tooopen_sl_185050524199.jpg"; private Bitmap bitmap; @Override protected void onCreate(Bundle savedIn

Java HttpURLConnection 下载图片 图片全是“加密图片”文字,怎么解决?

package com.qzf.util; import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL; public class ReadMdImg { public static void main(

AsyncTask工具类的使用-真实下载图片实例

转载请标明出处:http://blog.csdn.net/blackzhangwei/article/details/51922640 谢谢! 什么是AsyncTask? AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 实现一个异步任务可以使用Handler+线程,Android给我们提供了另一种更轻量级的实现方法就是使用AsyncTa