• 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代码库保持最新的修复,这意味着再也没有与旧操作系统版本号出现兼容性问题的噩梦


  • 相关阅读:
    GridView的简单使用
    获取当前应用程序的版本号
    Android EditText输入光标居于开头最开始位置
    Linux-开机启动程序-chkconfig
    Linux-显示行号-方案
    Linux-命令-cat
    Linux-测试-第二关
    Linux-正则-Reg
    Linux-测试-第一关
    Linux-命令-uname
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4032564.html
Copyright © 2020-2023  润新知