android用http下载图片

本文介绍了一个用于云相册项目的HTTP图片下载工具类实现。该工具类支持从远程服务器下载图片到本地缓存,并提供了进度监听的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做云相册,还在做模块封装,现在先将http下载图片贴出来:

package com.yuyan.http;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import com.yuyan.cache.MyDiskCache;
import com.yuyan.global.IDownloadListener;
import com.yuyan.utils.MyUtils;


/**
* @ClassName: HttpDownload 
* @Description: http下载照片工具类
* @author yan.yu 
* @date 2013-6-17 下午6:04:05 
*
 */
public enum MyHttpDownload 
{

	INSTANCE;
	
	/*下载监听器*/
	private static IDownloadListener listener = null;
	public static final int IO_BUFFER_SIZE = 8 * 1024;
	public static MyHttpDownload newInstance(IDownloadListener downLoadListener)
	{
		listener = downLoadListener;
		return INSTANCE;
	}
	public static MyHttpDownload newInstance()
	{
		return INSTANCE;
	}
	
	/**
	* @Description: http从服务器上下载图片
	* @param @param urlString
	* @param @return
	* @param @throws IOException   
	* @return File 
	* @throws
	 */
	public File downloadBitmap(String urlString) throws IOException 
	{
		/*获取本地缓存对象*/
		final MyDiskCache cache = MyDiskCache.openCache();
		
		final File cacheFile = new File(cache.createFilePath(urlString));

		if (cache.containsKey(urlString)) 
		{
			/*如果本地缓存中存在该图片就直接返回本地图片*/
			return cacheFile;
		}
		MyUtils.disableConnectionReuseIfNecessary();
		HttpURLConnection urlConnection = null;
		BufferedOutputStream out = null;
		try 
		{
			final URL url = new URL(urlString);
			urlConnection = (HttpURLConnection) url.openConnection();
			urlConnection.setReadTimeout(10 * 1000);
			urlConnection.setConnectTimeout(5 * 1000);
			
			/*直接上传,禁止写入缓存*/
			urlConnection.setUseCaches(false);
			final InputStream in = new BufferedInputStream(urlConnection.getInputStream(), IO_BUFFER_SIZE);
			out = new BufferedOutputStream(new FileOutputStream(cacheFile),IO_BUFFER_SIZE);
			int b;
			if(listener != null)
				listener.onStart();
			while ((b = in.read()) != -1) 
			{
				out.write(b);
				if(listener != null)
					listener.onProgress(b);
			}
			cacheFile.setLastModified(System.currentTimeMillis());
			if(listener != null)
				listener.onFinish(cacheFile);
		} 
		catch (IOException e) 
		{
			if(listener != null)
				listener.onError();
			throw e;
		} 
		finally 
		{
			if (urlConnection != null) 
			{
				urlConnection.disconnect();
			}
			if (out != null) 
			{
				out.flush();
				out.close();
			}
		}
		return cacheFile;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值