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在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证):网络编程是和远程计算 ...
随机推荐
- Lamda表达式
Lamda表达式 函数式编程的产生(匿名内部类) interface Mes{ public void speak(); } public class Lam { public static void ...
- bash shell命令行选项与修传入参数处理
在编写shell程序时经常需要处理命令行参数,本文描述在bash下的命令行处理方式.选项与参数:如下命令行: ./test.sh -f config.conf -v --prefix=/home -f ...
- RT-Thread信号量的基本操作
抽象的来讲,信号量的特性如下:信号量是一个非负整数(车位数),所有通过它的线程/进程(车辆)都会将该整数减一(通过它当然是为了使用资源),当该整数值为 0 时,所有试图通过它的线程都将处于等待状态.在 ...
- Happy
1.delighted 2.over the moon Alex is over the moon with promotion. 3.really pleased ...
- npm reset config
To reset user defaults Run this in the command line (or git bash on windows): echo "" > ...
- delphi下TList的用法
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- X5学习笔记—给单元格添加颜色
设置grid某一个单元格的颜色 可以用dhtmlxgrid的原生态方法 setCellTextStyle (row_id, ind, styleString) 参数: rowid:行id cellin ...
- Qt和KDevelop在Linux下安装(qt-x11-commercial-src-4.3.1和kdevelop-3.5.0)
qt-x11-commercial-src-4.3.1.tar.gz.kdevelop-3.5.0.tar.bz2在Fedora 8下安装. 安装KDevelop:安装KDevelop3.5要求,KD ...
- Qt 之 QQ系统表情(五)
http://blog.csdn.net/goforwardtostep/article/details/52456276
- C++ 字符串操作常见函数
//字符串拷贝,排除指定字符 char *strcpy_exclude_char(char *dst, const int dst_len, const char *src, const char * ...