zoukankan      html  css  js  c++  java
  • 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线程出easy出现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

    网络上一个不错的资源:http://square.github.io/okhttp/

    OkHttp是Square的一款产品,是一个Java的开源HTTP和SPDYclient开发包,支持Android。Android自带的两个HTTP框架(HttpURLConnection和HttpClient),在各种Android OS版本号一直充斥着错误,能够使不论什么理智的开发人员走向崩溃。只是幸运地是,OkHttp攻克了这些问题。OkHttp是建立在HttpUrlConnection上,从Android代码库保持最新的修复,这意味着再也没有与旧操作系统版本号出现兼容性问题的噩梦


  • 相关阅读:
    Python全栈day28(描述符应用)
    Python全栈day28(上下文管理)
    如何在B2C电子商务网站后台添加CNZZ统计代码(转)
    数据统计以及商城运营日志在电子商务中的重要性(转)
    电商企业运营规划——五年经验总结(转)
    电子商务数据运营入门——有哪些数据分析需要做 (转)
    IDC单IP绑定多域名(包括端口)
    商城自动备份
    CentOS安装crontab及使用方法(转)
    CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中(转)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4032564.html
Copyright © 2011-2022 走看看