功能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. ASP.NET WEB API的服务托管(Self-HOST)

    如果我们想对外发布RESTful API,可以基于ASP.NET来构建Restful APIs,但需要部署IIS吗?答案是不必.你可以把它托管到一个Windows Service.具体如何把WEB A ...

  2. NBOJv2 1050 Just Go(线段树/树状数组区间更新单点查询)

    Problem 1050: Just Go Time Limits:  3000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  % ...

  3. C++四种强转

    C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast,字面上理解就是去const属性. static_cast,命名上理解是静态类型转换.如int转换成char. ...

  4. 设计模式学习系列9 外观模式Facade

    1.概述 自己卖了一辆越野自行车,但毕竟不是自己定制的,买回来之后可能需要更改一下脚蹬,座皮,里程计数器或者刹车系统,假如将自行车看做一个整体系统,对我们而言使用的是自行车,然后我们对自己车构件的修改 ...

  5. <?php set_time_limit(10);

    <?php include('w_fun.php'); set_time_limit(10); Fatal error: Maximum execution time of 10 seconds ...

  6. cluster analysis in data mining

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

  7. 微信公众账号开发教程(四)自定义菜单(含实例源码)——转自http://www.cnblogs.com/yank/p/3418194.html

    微信公众账号开发教程(四)自定义菜单 请尊重作者版权,如需转载,请标明出处. 应大家强烈要求,将自定义菜单功能课程提前. 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了 ...

  8. mysql ERROR 1045 (28000): Access denied for user解决方法 (转)

    问题重现(以下讨论范围仅限Windows环境): C:\AppServ\MySQL> mysql -u root -pEnter password:ERROR 1045 (28000): Acc ...

  9. [Android] Intent详解

    [转]http://www.cnblogs.com/engine1984/p/4146621.html [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重 ...

  10. day11

    JSP入门   1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据.   1.2 ...