android网络编程--从网络下载图片,并保存到内存卡
功能1:从网络上取得的图片显示到imageview上面,生成Bitmap时有两种方法,一种是先转换为byte[],再生成bitmap;一种是直接用InputStream生成bitmap。功能2:点击按钮将显示的图片下载到sd卡上。原文地址:http://www.cnblogs.com/gzggyy/archive/2013/05/18/3085552.html
下面就贴一种直接用InputStream生成bitmap的代码吧,另外一种直接看原文咯。mark一下,方便自己用
- package com.robin.httpcommunicationtest;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import android.app.Activity;
- import android.app.ProgressDialog;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.Bundle;
- import android.os.Environment;
- import android.os.Handler;
- import android.os.Message;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.Toast;
- public class SaveImageActivity extends Activity {
- private static final String TAG = "SaveImageActivity";
- private final static String ALBUM_PATH = Environment
- .getExternalStorageDirectory() + "/download_test/";
- private ImageView mImageView;
- private Button mBtnSave;
- private ProgressDialog mSaveDialog = null;
- private Bitmap mBitmap;
- private String mFileName;
- private String mSaveMessage;
- private Thread connectThread;
- private Thread saveThread;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.image_download);
- mImageView = (ImageView) findViewById(R.id.imgSource);
- mBtnSave = (Button) findViewById(R.id.btnSave);
- connectThread = new Thread(connectNet);
- connectThread.start();
- mBtnSave.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- mSaveDialog = ProgressDialog.show(SaveImageActivity.this,
- "保存图片", "图片正在保存,请稍后...", true);
- saveThread = new Thread(saveFileRunnable);
- saveThread.start();
- }
- });
- }
- private Runnable connectNet = new Runnable() {
- @Override
- public void run() {
- try {
- String filePath = "http://img.my.csdn.net/uploads/201402/24/1393242467_3999.jpg";
- mFileName = "robin.jpg";
- // 取得的是inputstream,直接从inputstream生成bitmap
- mBitmap = BitmapFactory.decodeStream(getImageStream(filePath));
- // 发送消息,通知handler在主线程中更新ui
- connectHanlder.sendEmptyMessage(0);
- Log.d(TAG, "set image ...");
- } catch (Exception e) {
- Toast.makeText(SaveImageActivity.this, "无法链接网络!", 1).show();
- e.printStackTrace();
- }
- }
- };
- private Handler connectHanlder = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- Log.d(TAG, "display image");
- // 更新UI,显示图片
- if (mBitmap != null) {
- mImageView.setImageBitmap(mBitmap);// display image
- }
- }
- };
- private Runnable saveFileRunnable = new Runnable() {
- @Override
- public void run() {
- try {
- saveFile(mBitmap, mFileName);
- mSaveMessage = "图片保存成功!";
- } catch (Exception e) {
- mSaveMessage = "图片保存失败!";
- e.printStackTrace();
- }
- messageHandler.sendMessage(messageHandler.obtainMessage());
- }
- };
- private Handler messageHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- mSaveDialog.dismiss();
- Log.d(TAG, mSaveMessage);
- Toast.makeText(SaveImageActivity.this, mSaveMessage,
- Toast.LENGTH_SHORT).show();
- }
- };
- /*
- * 从网络获取图片
- */
- protected InputStream getImageStream(String path) throws Exception {
- URL url = new URL(path);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.setConnectTimeout(10 * 1000);
- conn.setRequestMethod("GET");
- if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
- return conn.getInputStream();
- }
- return null;
- }
- /*
- * 保存文件
- */
- protected void saveFile(Bitmap bm, String fileName) throws IOException {
- File dirFile = new File(ALBUM_PATH);
- if (!dirFile.exists()) {
- dirFile.mkdir();
- }
- File myCaptureFile = new File(ALBUM_PATH + fileName);
- BufferedOutputStream bos = new BufferedOutputStream(
- new FileOutputStream(myCaptureFile));
- bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
- bos.flush();
- bos.close();
- }
- }
demo下载地址:
http://download.csdn.net/detail/lanhuzi9999/7507995
android网络编程--从网络下载图片,并保存到内存卡的更多相关文章
- 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分
老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分 老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/gu ...
- UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数
UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数 gethostname() getppername() getsockname() gethostbyname() ...
- Python网络编程之网络基础
Python网络编程之网络基础 目录 Python网络编程之网络基础 1. 计算机网络发展 1.1. OSI七层模型 1.2. 七层模型传输数据过程 2. TCP/IP协议栈 2.1 TCP/IP和O ...
- [Swift通天遁地]四、网络和线程-(8)下载图片并实时显示下载进度
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- UNIX网络编程——揭开网络编程常见API的面纱【下】
Linux网络编程数据收发的API流程分析 只要把数据在协议栈中的流动线路和脉络弄清楚了,关于协议栈的实现部分,理解起来就轻松多了.在网络编程章节的数据接收过程中,我们主要介绍过read ...
- UNIX网络编程——揭开网络编程常见API的面纱【上】
Linux网络编程API函数初步剖析 今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作. 1.socket(famil ...
- 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分
老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/guobaoyuan/ 开哥blog: https://home.cnblogs.com/u ...
- TCP/IP网络编程之网络编程和套接字
网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...
- JAVA基础——网络编程之网络链接
一.网络编程基本概念 1.OSI与TCP/IP体系模型 2.IP和端口 解决了文章最开始提到的定位的问题. IP在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证):网络编程是和远程计算 ...
随机推荐
- 硬盘参数之TLER
“你们根本不知道nas盘是用来干啥的,准确的说,要nas盘就是要tler技术,这样才适合用在nas上. TLER=Time-Limited Error Recovery 这么说吧,普通的硬盘(不带TL ...
- php运行模式的比较(转)
PHP运行模式有4钟:1)cgi 通用网关接口(Common Gateway Interface))2) fast-cgi 常驻 (long-live) 型的 CGI3) cli 命令行运行 ( ...
- Frenetic QuickInstall
Frenetic a family of network programming languages 官方网站:Frenetic Github:Frenetic QuickInstall 第一步,先安 ...
- cURL 学习笔记与总结(5)用 cURL 访问 HTTPS 资源
<?php $curlobj = curl_init(); // 初始化 curl_setopt($curlobj, CURLOPT_URL, "https://ajax.aspnet ...
- unity3d 基于物理渲染的问题解决
最近1个月做了unity 次世代开发的一些程序方面的支持工作,当然也是基于物理渲染相关的,主要还是skyshop marmoset的使用吧,他算是unity4.x版本 PBR的优秀方案之一了但在使用以 ...
- DirectX 发展历程
在Windows下开发游戏,大家都会联想到DirectX.实际上,DirectX并不等同于游戏,它也不是写游戏程序的唯一选择.其实,DirectX只是提供了一种更直接的控制硬件的API库而已.当然,它 ...
- wordpress the_date 方法 偶尔为空的问题
估计很多人遇到这个问题: 一来是the_title(),the_permalink(),the_date()一路用下来,很正常也很正确 不爱读官方文档,因为文档中有个特别提示 文档:http://co ...
- [转]EF 4.1 Code First
这篇文章介绍Code First开发以及如何与DbContext API一起使用.Code First允许使用C#或VB.NET类定义模型,在类或属性上有选择性的执行额外的配置或者使用Fluent A ...
- Finally 与 return
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下fina ...
- 【转】Unity利用WWW http传输Json数据
http://blog.csdn.net/h570768995/article/details/50386935 首先去下载LitJson.dll,放在Plugins 目录下: LitJson可以从下 ...