功能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. 为什么我不再用 .NET 框架(转)

    NET平台很棒.真的很棒.直到它不再那么棒.我为什么不再用.NET?简单来说,它限制了我们选择的能力(对我来说很重要),转移了我们的注意力,使得我们向内认知它的安全性,替代了帮助我们认知外面广阔世界的 ...

  2. POJ 3628 Bookshelf 2(01背包)

    Bookshelf 2 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9488   Accepted: 4311 Descr ...

  3. hdu 1116 并查集和欧拉路径

    ---恢复内容开始--- 把它看成是一个图 只是需要欧拉路径就可以了 首尾能连成一条线即可 如果要判断这个图是否连通 得用并查集 在hrbust oj里面看答案学到的方法 不用各种for循环套着判断能 ...

  4. NetBeans 8.0 连接远程服务器

    step: ① 新建项目 -- PHP -- 来自远程服务器的 PHP 应用程序 -- 下一步 ② 名称和位置 项目名称:自己取: 源文件夹:通过 “浏览” 选择本地项目文件夹.注意文件夹内不能有 n ...

  5. GDC2016 【巫师3 狂猎】的游戏事件工作流

    巫师3 狂猎(The Witcher 3: Wild Hunt )的游戏事件工作流   http://game.watch.impress.co.jp/docs/news/20160320_74916 ...

  6. Technical analysis of client identification mechanisms

    http://www.chromium.org/Home/chromium-security/client-identification-mechanisms Chromium‎ > ‎Chro ...

  7. maven 的一些基本操作

    maven  install :把打出的包装载到本地仓库,package:是打包的意思 每当项目中的模块里的东西发生变化的时候,先install一下项目 ,在启用maven的tomcat插件就不会报错 ...

  8. win2003 老的ASP程序报错 Microsoft OLE DB Provider for Orac(0x80004005)

    ASP连接ORACLE报错,记得环境刚配置完成的时候一切正常,今天莫名其妙的报错了 报错位置78行: 这是一个很老的系统,代码没人去东,只是从老的机器迁移到新的服务器中,想想应该是环境的问题 网上搜索 ...

  9. this super 解释

    关于 this super 什么时候有,他们指向谁? 书上说: this 指向自己,super指向父亲的对象,个人觉得是错误的. 我认为 this 是一个指向自己对象的句柄,而super只是一个类句柄 ...

  10. 二 mybatis 动态sql

    动态sql应用  一 .什么是动态sql 1.where条件  动态查询 根据姓名或年龄或地址查询 UserMapper.xml 1 <select id="findUser" ...