功能1:从网络上取得的图片显示到imageview上面,生成Bitmap时有两种方法,一种是先转换为byte[],再生成bitmap;一种是直接用InputStream生成bitmap。功能2:点击按钮将显示的图片下载到sd卡上。原文地址:http://www.cnblogs.com/gzggyy/archive/2013/05/18/3085552.html

下面就贴一种直接用InputStream生成bitmap的代码吧,另外一种直接看原文咯。mark一下,方便自己用

  1. package com.robin.httpcommunicationtest;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.net.HttpURLConnection;
  8. import java.net.URL;
  9. import android.app.Activity;
  10. import android.app.ProgressDialog;
  11. import android.graphics.Bitmap;
  12. import android.graphics.BitmapFactory;
  13. import android.os.Bundle;
  14. import android.os.Environment;
  15. import android.os.Handler;
  16. import android.os.Message;
  17. import android.util.Log;
  18. import android.view.View;
  19. import android.widget.Button;
  20. import android.widget.ImageView;
  21. import android.widget.Toast;
  22. public class SaveImageActivity extends Activity {
  23. private static final String TAG = "SaveImageActivity";
  24. private final static String ALBUM_PATH = Environment
  25. .getExternalStorageDirectory() + "/download_test/";
  26. private ImageView mImageView;
  27. private Button mBtnSave;
  28. private ProgressDialog mSaveDialog = null;
  29. private Bitmap mBitmap;
  30. private String mFileName;
  31. private String mSaveMessage;
  32. private Thread connectThread;
  33. private Thread saveThread;
  34. @Override
  35. protected void onCreate(Bundle savedInstanceState) {
  36. // TODO Auto-generated method stub
  37. super.onCreate(savedInstanceState);
  38. setContentView(R.layout.image_download);
  39. mImageView = (ImageView) findViewById(R.id.imgSource);
  40. mBtnSave = (Button) findViewById(R.id.btnSave);
  41. connectThread = new Thread(connectNet);
  42. connectThread.start();
  43. mBtnSave.setOnClickListener(new View.OnClickListener() {
  44. @Override
  45. public void onClick(View arg0) {
  46. mSaveDialog = ProgressDialog.show(SaveImageActivity.this,
  47. "保存图片", "图片正在保存,请稍后...", true);
  48. saveThread = new Thread(saveFileRunnable);
  49. saveThread.start();
  50. }
  51. });
  52. }
  53. private Runnable connectNet = new Runnable() {
  54. @Override
  55. public void run() {
  56. try {
  57. String filePath = "http://img.my.csdn.net/uploads/201402/24/1393242467_3999.jpg";
  58. mFileName = "robin.jpg";
  59. // 取得的是inputstream,直接从inputstream生成bitmap
  60. mBitmap = BitmapFactory.decodeStream(getImageStream(filePath));
  61. // 发送消息,通知handler在主线程中更新ui
  62. connectHanlder.sendEmptyMessage(0);
  63. Log.d(TAG, "set image ...");
  64. } catch (Exception e) {
  65. Toast.makeText(SaveImageActivity.this, "无法链接网络!", 1).show();
  66. e.printStackTrace();
  67. }
  68. }
  69. };
  70. private Handler connectHanlder = new Handler() {
  71. @Override
  72. public void handleMessage(Message msg) {
  73. Log.d(TAG, "display image");
  74. // 更新UI,显示图片
  75. if (mBitmap != null) {
  76. mImageView.setImageBitmap(mBitmap);// display image
  77. }
  78. }
  79. };
  80. private Runnable saveFileRunnable = new Runnable() {
  81. @Override
  82. public void run() {
  83. try {
  84. saveFile(mBitmap, mFileName);
  85. mSaveMessage = "图片保存成功!";
  86. } catch (Exception e) {
  87. mSaveMessage = "图片保存失败!";
  88. e.printStackTrace();
  89. }
  90. messageHandler.sendMessage(messageHandler.obtainMessage());
  91. }
  92. };
  93. private Handler messageHandler = new Handler() {
  94. @Override
  95. public void handleMessage(Message msg) {
  96. mSaveDialog.dismiss();
  97. Log.d(TAG, mSaveMessage);
  98. Toast.makeText(SaveImageActivity.this, mSaveMessage,
  99. Toast.LENGTH_SHORT).show();
  100. }
  101. };
  102. /*
  103. * 从网络获取图片
  104. */
  105. protected InputStream getImageStream(String path) throws Exception {
  106. URL url = new URL(path);
  107. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  108. conn.setConnectTimeout(10 * 1000);
  109. conn.setRequestMethod("GET");
  110. if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
  111. return conn.getInputStream();
  112. }
  113. return null;
  114. }
  115. /*
  116. * 保存文件
  117. */
  118. protected void saveFile(Bitmap bm, String fileName) throws IOException {
  119. File dirFile = new File(ALBUM_PATH);
  120. if (!dirFile.exists()) {
  121. dirFile.mkdir();
  122. }
  123. File myCaptureFile = new File(ALBUM_PATH + fileName);
  124. BufferedOutputStream bos = new BufferedOutputStream(
  125. new FileOutputStream(myCaptureFile));
  126. bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
  127. bos.flush();
  128. bos.close();
  129. }
  130. }

demo下载地址:

http://download.csdn.net/detail/lanhuzi9999/7507995

android网络编程--从网络下载图片,并保存到内存卡的更多相关文章

  1. 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分

    老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分   老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/gu ...

  2. UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数

    UNIX环境高级编程——TCP/IP网络编程   常用网络信息检索函数 gethostname()   getppername()   getsockname()   gethostbyname() ...

  3. Python网络编程之网络基础

    Python网络编程之网络基础 目录 Python网络编程之网络基础 1. 计算机网络发展 1.1. OSI七层模型 1.2. 七层模型传输数据过程 2. TCP/IP协议栈 2.1 TCP/IP和O ...

  4. [Swift通天遁地]四、网络和线程-(8)下载图片并实时显示下载进度

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. UNIX网络编程——揭开网络编程常见API的面纱【下】

    Linux网络编程数据收发的API流程分析        只要把数据在协议栈中的流动线路和脉络弄清楚了,关于协议栈的实现部分,理解起来就轻松多了.在网络编程章节的数据接收过程中,我们主要介绍过read ...

  6. UNIX网络编程——揭开网络编程常见API的面纱【上】

    Linux网络编程API函数初步剖析 今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作. 1.socket(famil ...

  7. 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分

    老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/guobaoyuan/ 开哥blog: https://home.cnblogs.com/u ...

  8. TCP/IP网络编程之网络编程和套接字

    网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...

  9. JAVA基础——网络编程之网络链接

    一.网络编程基本概念 1.OSI与TCP/IP体系模型 2.IP和端口 解决了文章最开始提到的定位的问题. IP在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证):网络编程是和远程计算 ...

随机推荐

  1. centos6.5 64位 yum install nginx的默认安装路径

    yum install nginx网站文件存放默认目录 /usr/share/nginx/html 网站默认站点配置 /etc/nginx/conf.d/default.conf 自定义Nginx站点 ...

  2. Javascript 笔记与总结(2-2)Javascript 变量

    js 的变量名可以由 _,数字,字母,$ 组成,且 不能以数字开头.在 jQuery 中就定义了一个全局变量 $ . 声明变量用 var 变量名,如果不用 var,则会污染全局. js 变量类型包括: ...

  3. WEB-INF目录下的jsp页面如何访问?

    只能在sevlet(或者spring的control,struts的action,本质都是sevlet)中访问也就是只能通过java后台访问,这里web-inf下的内容是不对外开放的/安全的,不能通过 ...

  4. Ubuntu安装和设置SSH服务

    1.安装 Ubuntu缺省安装了openssh-client,所以在这里就不安装了,如果你的系统没有安装的话,再用apt-get安装上即可. 安装ssh-server sudo apt-get ins ...

  5. 【IOS笔记】Resource Management in View Controllers

    Resource Management in View Controllers 视图控制器的资源管理 View controllers are an essential part of managin ...

  6. matches field ID value 17.9.1 The LABEL element

    https://www.w3.org/TR/html401/interact/forms.html#edef-LABEL <!ELEMENT LABEL - - (%inline;)* -(LA ...

  7. cluster analysis in data mining

    https://en.wikipedia.org/wiki/K-means_clustering k-means clustering is a method of vector quantizati ...

  8. os

    内核,Shell和文件结构一起形成了基本的操作系统结构. from:大学生攻克Linux系统教程(又名天下没有难学的Linux) 发问: 0-内核,再怎么分出层次呢?

  9. mybatis 中#{}与${}的区别 (面试题)

    MyBatis/Ibatis中#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号. 如:order by #user_id#,如果传入的值是111,那么解析成sql时的 ...

  10. Squid 操作实践

    Squid简介 Squid可以做什么 性能要素 Squid安装 Squid快速体验 Squid配置 Squid简介 Squid is a caching proxy for the Web suppo ...