功能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. 硬盘参数之TLER

    “你们根本不知道nas盘是用来干啥的,准确的说,要nas盘就是要tler技术,这样才适合用在nas上. TLER=Time-Limited Error Recovery 这么说吧,普通的硬盘(不带TL ...

  2. php运行模式的比较(转)

    PHP运行模式有4钟:1)cgi 通用网关接口(Common Gateway Interface))2) fast-cgi 常驻 (long-live) 型的 CGI3) cli  命令行运行   ( ...

  3. Frenetic QuickInstall

    Frenetic a family of network programming languages 官方网站:Frenetic Github:Frenetic QuickInstall 第一步,先安 ...

  4. cURL 学习笔记与总结(5)用 cURL 访问 HTTPS 资源

    <?php $curlobj = curl_init(); // 初始化 curl_setopt($curlobj, CURLOPT_URL, "https://ajax.aspnet ...

  5. unity3d 基于物理渲染的问题解决

    最近1个月做了unity 次世代开发的一些程序方面的支持工作,当然也是基于物理渲染相关的,主要还是skyshop marmoset的使用吧,他算是unity4.x版本 PBR的优秀方案之一了但在使用以 ...

  6. DirectX 发展历程

    在Windows下开发游戏,大家都会联想到DirectX.实际上,DirectX并不等同于游戏,它也不是写游戏程序的唯一选择.其实,DirectX只是提供了一种更直接的控制硬件的API库而已.当然,它 ...

  7. wordpress the_date 方法 偶尔为空的问题

    估计很多人遇到这个问题: 一来是the_title(),the_permalink(),the_date()一路用下来,很正常也很正确 不爱读官方文档,因为文档中有个特别提示 文档:http://co ...

  8. [转]EF 4.1 Code First

    这篇文章介绍Code First开发以及如何与DbContext API一起使用.Code First允许使用C#或VB.NET类定义模型,在类或属性上有选择性的执行额外的配置或者使用Fluent A ...

  9. Finally 与 return

    网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下fina ...

  10. 【转】Unity利用WWW http传输Json数据

    http://blog.csdn.net/h570768995/article/details/50386935 首先去下载LitJson.dll,放在Plugins 目录下: LitJson可以从下 ...