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.jpgString urlpath = UrlPath;// 2、获取Uritry {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、从流中读取数据,构造一个图片对象GoogleAPIbm = 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() {@Overridepublic void run() {// TODO Auto-generated method stubString 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.jpgString urlpath = UrlPath;// 2、获取Uritry {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获取网络图片方法,Android获取网络图片并显示的方法
本文实例为大家分享了Android获取网络图片并显示的具体代码,供大家参考,具体内容如下 使用 HttpURLConnection 获得连接,再使用 InputStream 获得图片的数据流,通过 B ...
- Android通过手机GPS获取经纬度方法
android 调用gps获取经纬度的方法大同小异,实则差不了多少.但是使用起来,有的方法看起来很冗杂,而且很不好用.下面为大家介绍中很简单的方法,而且是实时监听位置的变化. 首先定义: privat ...
- php接收mq,php的mq客户端获取队列方法改造
获取mq中消息然后处理失败重试机制: 下面的代码是php连接mq客户端的获取queue队列中的消息代码: public function createDurableSubscriber($queue, ...
- Android获取网络图片的三种方法
在做项目中,获取网络数据是一件很常见的事情,各类数据在服务器端或直接print,或封以实体类扔进List转换为json,由客户端使用HttpClient的execute()方法接收,以完成数据交互的过 ...
- Android中获取网络图片的三种方法
android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用 ...
- android获取网络图片
2019独角兽企业重金招聘Python工程师标准>>> 资源描述: 关于android获取网络图片主要是把网络图片的数据流读入到内存中然后用 1.Bitmap bitMap = Bi ...
- Android Studio 基础 之 获取蓝牙Bluetooth 的状态,设置的蓝牙Bluetooth 的开关状态,并监听蓝牙Bluetooth 的状态变化方法整理
Android Studio 基础 之 获取蓝牙Bluetooth 的状态,设置的蓝牙Bluetooth 的开关状态,并监听蓝牙Bluetooth 的状态变化方法整理 目录 Android Studi ...
- Android View的坐标获取方法
Android View的坐标获取方法 Android系统中提供了很多方法来获取view的坐标值,相对距离等,但是方法多在使用上就容易产生混淆,这里总结下自己学到的知识,分享给有需要的人. 如图所示: ...
- Android中如何根据图片url路径来获取网络图片
原文地址:Android中如何根据图片url路径来获取网络图片 1.根据图片的URL路径来获取网络图片,核心代码如下: public static Bitmap getBitmap(String pa ...
最新文章
- linux下Tomcat开机自动启动!
- 【错误记录】Android Studio 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | 指定 APK 打包动态库的 CPU 架构 )
- 单个APP接入多个微信支付宝支付的一种解决方案
- python 批量读取文件夹的动漫美女图并显示
- php 根据坐标计算范围内,php计算经纬度是否在区域内
- 滑动验证前端代码实现
- java自动化执行javascript,Js代码执行__实现自动化
- hdu 1800 Flying to the Mars
- C++ const用法
- jQuery addClass
- php smarty 翻译标签,Smarty自定义block标签
- (丝滑版)Python使用Opencv画一个哆啦A梦(动态),并制作成可执行文件.exe
- 各省简称 拼音 缩写_中国省市县地区首字母缩写
- win2003系统优化[全集,很详细]
- zzulioj1096c语言版答案,郑州轻工业大学oj题解(c语言)1096:水仙花数(函数专题)...
- Motrix - 清爽开源免费的全能下载工具 (跨平台、支持 BT / 磁力链 / 百度网盘)
- 清华梦的粉碎—写给清华大学的退学申请 2005.9.22
- SDUT-2933-人活着系列之Streetlights (Kruskal)
- java多线程之Callable接口
- 我们这一代人的困惑 --转自于宙TEDx大会上的演讲