1. <h2><pre name="code" class="html" style="font-weight: bold; font-size: 24px;">


 
 

一、注意点:连接对象获取,请求方法“GET”,资源获取超时设置,建立连接,通过连接获取输入流,采用谷歌API:BitmapFactory得到图片对象Bitmap。

 
  1. public Bitmap getInternetPicture(String UrlPath) {
  2. Bitmap bm = null;
  3. // 1、确定网址
  4. // http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg
  5. String urlpath = UrlPath;
  6. // 2、获取Uri
  7. try {
  8. URL uri = new URL(urlpath);
  9. // 3、获取连接对象、此时还没有建立连接
  10. HttpURLConnection connection = (HttpURLConnection) uri.openConnection();
  11. // 4、初始化连接对象
  12. // 设置请求的方法,注意大写
  13. connection.setRequestMethod("GET");
  14. // 读取超时
  15. connection.setReadTimeout(5000);
  16. // 设置连接超时
  17. connection.setConnectTimeout(5000);
  18. // 5、建立连接
  19. connection.connect();
  20. // 6、获取成功判断,获取响应码
  21. if (connection.getResponseCode() == 200) {
  22. // 7、拿到服务器返回的流,客户端请求的数据,就保存在流当中
  23. InputStream is = connection.getInputStream();
  24. // 8、从流中读取数据,构造一个图片对象GoogleAPI
  25. bm = BitmapFactory.decodeStream(is);
  26. // 9、把图片设置到UI主线程
  27. // ImageView中,获取网络资源是耗时操作需放在子线程中进行,通过创建消息发送消息给主线程刷新控件;
  28. Log.i("", "网络请求成功");
  29. } else {
  30. Log.v("tag", "网络请求失败");
  31. bm = null;
  32. }
  33. } catch (MalformedURLException e) {
  34. e.printStackTrace();
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. return bm;
  39. }

二、 同时要注意网络操作需在子线程操作,以免引起主线程阻塞,影响用途体验,同时采用handler消息机制进行参数处理,刷新UI控件。

  1. public void onClick(View v){
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. // TODO Auto-generated method stub
  6. String urlpath = "http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg";
  7. Bitmap bm = getInternetPicture(urlpath);
  8. Message msg = new Message();
  9. // 把bm存入消息中,发送到主线程
  10. msg.obj = bm;
  11. handler.sendMessage(msg);
  12. }
  13. }).start();
  14. }</span>

三、 主线程处理消息队列中的消息,并刷新相应UI控件

 
  1. Handler handler = new Handler() {
  2. public void handleMessage(android.os.Message msg) {
  3. ImageView imgView = (ImageView) findViewById(R.id.internet_imageview);
  4. imgView.setImageBitmap((Bitmap) msg.obj);
  5. };
  6. };</span>

四、获取网络图片,采用缓存保存文件

  1. <span style="font-size:18px;">public Bitmap getInternetPicture(String UrlPath) {
  2. Bitmap bm = null;
  3. // 1、确定网址
  4. // http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg
  5. String urlpath = UrlPath;
  6. // 2、获取Uri
  7. try {
  8. URL uri = new URL(urlpath);
  9. // 3、获取连接对象、此时还没有建立连接
  10. HttpURLConnection connection = (HttpURLConnection) uri.openConnection();
  11. // 4、初始化连接对象
  12. // 设置请求的方法,注意大写
  13. connection.setRequestMethod("GET");
  14. // 读取超时
  15. connection.setReadTimeout(5000);
  16. // 设置连接超时
  17. connection.setConnectTimeout(5000);
  18. // 5、建立连接
  19. connection.connect();
  20. // 6、获取成功判断,获取响应码
  21. if (connection.getResponseCode() == 200) {
  22. // 7、拿到服务器返回的流,客户端请求的数据,就保存在流当中
  23. InputStream is = connection.getInputStream();
  24. // 8、开启文件输出流,把读取到的字节写到本地缓存文件
  25. File file = new File(getCacheDir(), getFileName(urlpath));
  26. FileOutputStream fos = new FileOutputStream(file);
  27. int len = 0;
  28. byte[] b = new byte[1024];
  29. while ((len = is.read(b)) != -1) {
  30. fos.write(b, 0, len);
  31. }
  32. fos.close();
  33. is.close();
  34. //9、 通过图片绝对路径,创建Bitmap对象
  35. bm = BitmapFactory.decodeFile(file.getAbsolutePath());
  36. Log.i("", "网络请求成功");
  37. } else {
  38. Log.v("tag", "网络请求失败");
  39. bm = null;
  40. }
  41. } catch (MalformedURLException e) {
  42. e.printStackTrace();
  43. } catch (IOException e) {
  44. e.printStackTrace();
  45. }
  46. return bm;
  47. }
  48. public String getFileName(String path) {
  49. int index = path.lastIndexOf("/");
  50. return path.substring(index + 1);
  51. }
  52. }</span>
 
 

[转]Android 如何根据网络地址获取网络图片方法的更多相关文章

  1. Android学习八:获取网络图片

    看到QQ群里有个朋友说加载图片内存溢出的问题,所以就按照自己的想法试试的.但是按照他的方法,不知道为何没有发生内存溢出,不知道什么情况. 写这篇文章主要有三个目的: 1.多线程的学习 2.图片加载的学 ...

  2. URL转Drawable之 Android中获取网络图片的三种方法

    转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Applicatio ...

  3. Android根据图片Uri获取图片path绝对路径的几种方法【转】

    在Android 编程中经常会用到Uri转化为文件路径,如我们从相册选择图片上传至服务器,一般上传前需要对图片进行压缩,这时候就要用到图片的绝对路径. 下面对我开发中uri转path路径遇到的问题进行 ...

  4. [转载] IOS 获取网络图片的大小 改变 图片色值 灰度什么的方法集合

    IOS 获取网络图片的大小 改变 图片色值 灰度什么的方法集合

  5. 获取网络图片的大小 改变 图片色值 灰度什么的方法集合-b

    直接上代码了 头文件 // 图片处理 0 半灰色  1 灰度   2 深棕色    3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelTy ...

  6. 分享一个安卓中异步获取网络图片并自适应大小的第三方程序(来自github)

    安卓中获取网络图片,生成缓存 用安卓手机,因为手机流量的限制,所以我们在做应用时,要尽量为用户考虑,尽量少耗点用户的流量,而在应用中网络图片的显示无疑是消耗流量最大的,所以我们可以采取压缩图片或者将图 ...

  7. Google官方网络框架-Volley的使用解析Json以及加载网络图片方法

    Google官方网络框架-Volley的使用解析Json以及加载网络图片方法 Volley是什么? Google I/O 大会上,Google 推出 Volley的一个网络框架 Volley适合什么场 ...

  8. Android和JavaScript相互调用的方法

    转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...

  9. iOS 获取网络图片的大小

    一直都在找关于获取网络图片的大小的方法, 今天找到了一个能解决的办法 ,如下 1, 导入框架 #import <ImageIO/ImageIO.h> 2. 使用此方法得到image的siz ...

随机推荐

  1. 180620-mysql之数据库导入导出

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/20/180620-mysql之数据库导入导出/ mysql之数据库导入导出 实际工作中,需要做一下数据 ...

  2. bash特性-命令历史命令行编辑

    bash: GUI:Gnome,KDE,XFCE CLI:sh,csh,bash,ksh,tcsh,zsh shell,子shell tree:查看目录树 pstree:查看进程目录树 bash: 1 ...

  3. jenkins配置git+maven+Publish over SSH

    一.配置git 1.新建项目,源码管理选择git 2.Repository URL输入git目录 3.Credentials中选择新增凭据,凭据类型选择SSH,usename输入git,passphr ...

  4. JavaScriptSerializer的实现-常用JsonHelper类

    最近开始自己写自己的项目了,终于鼓起勇气迈出了自己认为的这一大步! 先来通用的helper类和大家分享一下 ,第一个是Object转为json序列的类,这个网上有很多,但我实践了一下大部分都不能用的, ...

  5. C二维数组行为空,列不为空

    二维数组: 处理二维数组得函数有一处可能不太容易理解:数组的行可以在函数调用时传递,但是数组的列却只能被预置在函数内部. eg: #define COLS 4 int sum(int ar[][COL ...

  6. 十:HDFS Short-Circuit Local Reads 短路本地读取

    当client请求数据时,datanode会读取数据然后通过TCP协议发送给client.short-circuit绕过了datanode直接读取数据.short-circuit的前提是client和 ...

  7. Linux上安装MySQL - 12条命令搞定MySql

    从零开始安装mysql数据库 : 按照该顺序执行 :  a. 查看是否安装有mysql:yum list installed mysql*, 如果有先卸载掉, 然后在进行安装; b. 安装mysql客 ...

  8. 转 高性能IO模型浅析

    高性能IO模型浅析 转自:http://www.cnblogs.com/fanzhidongyzby/p/4098546.html 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: ( ...

  9. The New Day

    于博毅 160809107 爱好电脑研究 选大学专业的时候,把计算机类放在了第一专业,当时从小就很喜欢计算机,以前有接触过编程但仅限于看书,并没有动手实践过,选课的时候看了一下专业课程,都是我想学的 ...

  10. hadoop2.5.2学习及实践笔记(五)—— HDFS shell命令行常见操作

    附:HDFS shell guide文档地址 http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/FileSy ...