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代码库保持最新的修复,这意味着再也没有与旧操作系统版本号出现兼容性问题的噩梦
Android使用HttpURLConnection下载图片的更多相关文章
- Android采用HttpClient下载图片
在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...
- 使用HttpURLConnection下载图片
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.Ht ...
- Android 本地/网路下载图片实现放大缩小
Android 本地加载/网路下载图片实现放大缩小拖拉效果,自定义控件. package com.example.ImageViewCustom; import android.app.Activi ...
- Android测试AsyncTask下载图片
package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...
- android 多线程 AsyncTask 下载图片
AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...
- 通过HttpURLConnection下载图片到本地--下载附件
一.背景说明 现在我做的系统中,需要有一个下载附件的功能,其实就是下载图片到本地中.相应的图片保存在多媒体系统中,我们只能拿到它的资源地址(url),而不是真实的文件. 这里记录的是下载单个图片.下篇 ...
- 通过HttpURLConnection下载图片到本地--批量下载
一.背景说明 这篇文章讲述的是批量下载附件,在上一篇文章中,介绍了下载单个附件(上一篇文章). 二.实现思路 主要的实现思路:创建文件夹->文件夹中创建需要下载的文件->压缩文件夹-> ...
- Android 使用AsyncTask 下载图片的例子,学会使用AsyncTask
1.添加布局文件:activity_main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...
- HttpURLConnection下载图片的两种方式
public class MainActivity extends AppCompatActivity { private ImageView iv; private String imageurl ...
随机推荐
- 《Nginx文件类型错误解析漏洞--攻击演练》 (转)
今天看书看到其中提到的一个漏洞,那就是Nginx+PHP的服务器中,如果PHP的配置里 cgi.fix_pathinfo=1 那么就会产生一个漏洞.这个配置默认是1的,设为0会导致很多MVC框架(如T ...
- Linux 该文件命令查看内容
Linux系统,请使用以下命令来查看文件的内容: cat tac 从最后一行開始显示.能够看出 tac 是 cat 的倒著写! nl 显示的时候,顺道输出行号! more 一页一页的显示文件内容 ...
- 【译】手动处理Team Foundation Server 2010 数据仓库和分析服务数据库
原贴地址:Manually Processing the Team Foundation Server 2010 Data Warehouse and Analysis Services Databa ...
- cocos2d-x3.0数据结构
1.cocos2d::Vector 1.头报价"CCVector.h"头文件. 2.保存的数据类型必须是cocos2d::Ref的子类. 3.实现是动态加入数据集合即链表.主要的使 ...
- Mvc后台接收 参数
@Html.TextAreaFor(m => m.Emps, new { @class = "easyui-validatebox", @style = "heig ...
- (二十)unity4.6得知Ugui中国文献-------另外-InputModules
大家好.我是太阳广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unitym ...
- _00013 一致性哈希算法 Consistent Hashing 新的讨论,并出现相应的解决
笔者博文:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前.妳却感觉不到我的存在 技术方向: ...
- java编程中容易犯2的细节汇总
1.for() 和 while() 执行步骤 for(s1;s2;s3){ s4;} 1.进入循环执行s1; 2.执行s2;//条件为真才执行s4,不然就跳出for了. 3,执行 ...
- Partition List -- LeetCode
原题链接: http://oj.leetcode.com/problems/partition-list/ 这是一道链表操作的题目,要求把小于x的元素按顺序放到链表前面.我们仍然是使用链表最经常使用 ...
- Java新手入门的30个基本概念
Java已经成为一个庞大而复杂的技术平台,对于开发者而言,特别是刚開始学习的人,要想更好的掌握Java技术,深入理解基本概念不可缺少,能够帮助你提高对Java的进一步了解.以下为你介绍了Java语言的 ...