[转]Android 如何根据网络地址获取网络图片方法
- <h2><pre name="code" class="html" style="font-weight: bold; font-size: 24px;">
一、注意点:连接对象获取,请求方法“GET”,资源获取超时设置,建立连接,通过连接获取输入流,采用谷歌API:BitmapFactory得到图片对象Bitmap。
- public Bitmap getInternetPicture(String UrlPath) {
- Bitmap bm = null;
- // 1、确定网址
- // http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg
- String urlpath = UrlPath;
- // 2、获取Uri
- try {
- URL uri = new URL(urlpath);
- // 3、获取连接对象、此时还没有建立连接
- HttpURLConnection connection = (HttpURLConnection) uri.openConnection();
- // 4、初始化连接对象
- // 设置请求的方法,注意大写
- connection.setRequestMethod("GET");
- // 读取超时
- connection.setReadTimeout(5000);
- // 设置连接超时
- connection.setConnectTimeout(5000);
- // 5、建立连接
- connection.connect();
- // 6、获取成功判断,获取响应码
- if (connection.getResponseCode() == 200) {
- // 7、拿到服务器返回的流,客户端请求的数据,就保存在流当中
- InputStream is = connection.getInputStream();
- // 8、从流中读取数据,构造一个图片对象GoogleAPI
- bm = BitmapFactory.decodeStream(is);
- // 9、把图片设置到UI主线程
- // ImageView中,获取网络资源是耗时操作需放在子线程中进行,通过创建消息发送消息给主线程刷新控件;
- Log.i("", "网络请求成功");
- } else {
- Log.v("tag", "网络请求失败");
- bm = null;
- }
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return bm;
- }
二、 同时要注意网络操作需在子线程操作,以免引起主线程阻塞,影响用途体验,同时采用handler消息机制进行参数处理,刷新UI控件。
- public void onClick(View v){
- new Thread(new Runnable() {
- @Override
- public void run() {
- // TODO Auto-generated method stub
- String urlpath = "http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg";
- Bitmap bm = getInternetPicture(urlpath);
- Message msg = new Message();
- // 把bm存入消息中,发送到主线程
- msg.obj = bm;
- handler.sendMessage(msg);
- }
- }).start();
- }</span>
三、 主线程处理消息队列中的消息,并刷新相应UI控件
- Handler handler = new Handler() {
- public void handleMessage(android.os.Message msg) {
- ImageView imgView = (ImageView) findViewById(R.id.internet_imageview);
- imgView.setImageBitmap((Bitmap) msg.obj);
- };
- };</span>
四、获取网络图片,采用缓存保存文件
- <span style="font-size:18px;">public Bitmap getInternetPicture(String UrlPath) {
- Bitmap bm = null;
- // 1、确定网址
- // http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg
- String urlpath = UrlPath;
- // 2、获取Uri
- try {
- URL uri = new URL(urlpath);
- // 3、获取连接对象、此时还没有建立连接
- HttpURLConnection connection = (HttpURLConnection) uri.openConnection();
- // 4、初始化连接对象
- // 设置请求的方法,注意大写
- connection.setRequestMethod("GET");
- // 读取超时
- connection.setReadTimeout(5000);
- // 设置连接超时
- connection.setConnectTimeout(5000);
- // 5、建立连接
- connection.connect();
- // 6、获取成功判断,获取响应码
- if (connection.getResponseCode() == 200) {
- // 7、拿到服务器返回的流,客户端请求的数据,就保存在流当中
- InputStream is = connection.getInputStream();
- // 8、开启文件输出流,把读取到的字节写到本地缓存文件
- File file = new File(getCacheDir(), getFileName(urlpath));
- FileOutputStream fos = new FileOutputStream(file);
- int len = 0;
- byte[] b = new byte[1024];
- while ((len = is.read(b)) != -1) {
- fos.write(b, 0, len);
- }
- fos.close();
- is.close();
- //9、 通过图片绝对路径,创建Bitmap对象
- bm = BitmapFactory.decodeFile(file.getAbsolutePath());
- Log.i("", "网络请求成功");
- } else {
- Log.v("tag", "网络请求失败");
- bm = null;
- }
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return bm;
- }
- public String getFileName(String path) {
- int index = path.lastIndexOf("/");
- return path.substring(index + 1);
- }
- }</span>
[转]Android 如何根据网络地址获取网络图片方法的更多相关文章
- Android学习八:获取网络图片
看到QQ群里有个朋友说加载图片内存溢出的问题,所以就按照自己的想法试试的.但是按照他的方法,不知道为何没有发生内存溢出,不知道什么情况. 写这篇文章主要有三个目的: 1.多线程的学习 2.图片加载的学 ...
- URL转Drawable之 Android中获取网络图片的三种方法
转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Applicatio ...
- Android根据图片Uri获取图片path绝对路径的几种方法【转】
在Android 编程中经常会用到Uri转化为文件路径,如我们从相册选择图片上传至服务器,一般上传前需要对图片进行压缩,这时候就要用到图片的绝对路径. 下面对我开发中uri转path路径遇到的问题进行 ...
- [转载] IOS 获取网络图片的大小 改变 图片色值 灰度什么的方法集合
IOS 获取网络图片的大小 改变 图片色值 灰度什么的方法集合
- 获取网络图片的大小 改变 图片色值 灰度什么的方法集合-b
直接上代码了 头文件 // 图片处理 0 半灰色 1 灰度 2 深棕色 3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelTy ...
- 分享一个安卓中异步获取网络图片并自适应大小的第三方程序(来自github)
安卓中获取网络图片,生成缓存 用安卓手机,因为手机流量的限制,所以我们在做应用时,要尽量为用户考虑,尽量少耗点用户的流量,而在应用中网络图片的显示无疑是消耗流量最大的,所以我们可以采取压缩图片或者将图 ...
- Google官方网络框架-Volley的使用解析Json以及加载网络图片方法
Google官方网络框架-Volley的使用解析Json以及加载网络图片方法 Volley是什么? Google I/O 大会上,Google 推出 Volley的一个网络框架 Volley适合什么场 ...
- Android和JavaScript相互调用的方法
转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...
- iOS 获取网络图片的大小
一直都在找关于获取网络图片的大小的方法, 今天找到了一个能解决的办法 ,如下 1, 导入框架 #import <ImageIO/ImageIO.h> 2. 使用此方法得到image的siz ...
随机推荐
- 微信小程序如何性能测试?
背景: 微信小程序作为手机页面的一种,相比传统的网站和应用来说存在比较特殊的地方: 1. 开发者往往对程序做了限制,只能通过微信客户端访问 2. 通过微信的Oauth进行认证 这样往往会导致我们的 ...
- 感觉总结了一切python常见知识点,可直接运行版本
#encoding=utf-8#http://python.jobbole.com/85231/#作用域a=1def A(a): a=2 print 'A:',a def B(): print 'B: ...
- Python 的非正式介绍
在下面的例子中,通过提示符 (>>> 与 ...) 的出现与否来区分输入和输出:如果你想复现这些例子,当提示符出现后,你必须在提示符后键入例子中的每一个词:不以提示符开头的那些行是解 ...
- 【转】MMORPG游戏服务器技能系统设计:表格字段与技能程序框架
本文主要从一个程序员的角度阐述一下mmorpg服务器技能系统的程序框架设计,最近在做这个,就当做一个总结吧,其中某些概念可能没有解释清楚,欢迎大家拍砖讨论~ 技能其实是战斗系统的一个组成部分,战斗基本 ...
- 从零开始的Python学习Episode 6——字符串操作
字符串操作 一.输出重复字符串 print('smile'*6) #输出6个smile 二.通过引索输出部分字符串 print('smile'[1:]) print('smile'[1:3]) #输出 ...
- 关于Filter中ServletRequest强转HttpServletRequest问题
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOE ...
- Python基础简介
一.目前各种语言的应用:java, 可以把特别小的项目做大,并且开源库比较多,C: 用在最底层,例如编写操作系统,运行速率快,开发效率低,C++:常坐游戏引擎Python:AI(人工智能) 简单.明确 ...
- Too many open files错误与解决方法
致前辈:该问题的解决思路给了我很大的启发,文章作者Lis, Linux资深技术专家. 问题现象:这是一个基于Java的web应用系统,在后台添加数据时提示无法添加,于是登陆服务器查看Tomcat 日志 ...
- 2018-9-25kanboard安装及使用
2018-9-25kanboard安装及使用 教程 小书匠 欢迎走进zozo的学习之旅. 简介 运行官方docker容器 使用kanboard 简介 Kanboard的安装提供了两种方式一种是直接安 ...
- 迭代器类型:iterator & const_iterator
vector<int> ivec{1, 3, 4, 1, 3, 4}; vector<int>::iterator iter; // iter能读写vector<int& ...