HttpURLConnection下载图片的两种方式

public class MainActivity extends AppCompatActivity {

private ImageView iv;

private String imageurl = "http://img06.tooopen.com/images/20161106/tooopen_sl_185050524199.jpg";    private Bitmap bitmap;

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);

iv = (ImageView) findViewById(R.id.iv_show);

findViewById(R.id.load).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                new Thread(loadrunable).start();            }        });    }

private Runnable loadrunable = new Runnable() {

private InputStream is;

@Override        public void run() {

try {             URL imgUrl = new URL(imageurl);            // 使用HttpURLConnection打开连接            HttpURLConnection urlConn = (HttpURLConnection) imgUrl                    .openConnection();            urlConn.setDoInput(true);                urlConn.setDoOutput(false);                urlConn.setRequestMethod("GET");                urlConn.setConnectTimeout(3000);                urlConn.setUseCaches(true);            urlConn.connect();                int code = urlConn.getResponseCode();                Log.e("tag", "run: "+code );                // 将得到的数据转化成InputStream            InputStream is = urlConn.getInputStream();            // 将InputStream转换成Bitmap//            bitmap = getBitmapInputStream(is);

byte[] bytesInputStream = getBytesInputStream(is);                bitmap = BitmapFactory.decodeByteArray(bytesInputStream,0,bytesInputStream.length);

Message msgone = new Message();                   msgone.what = 1;                    handler.sendMessage(msgone);

} catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }finally {

if (null != is){                    try {                        is.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }        }    };

private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {//            super.handleMessage(msg);            Log.e("tag", "handleMessage: "+msg.what );

if (null != bitmap && null != iv){                iv.setImageBitmap(bitmap);            }        }    };

public Bitmap getBitmapInputStream(InputStream is){        Bitmap bp;        bp = BitmapFactory.decodeStream(is);

return bp;    }

public byte[] getBytesInputStream( InputStream is) throws IOException {

ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();        byte[] buff = new byte[512];        int len;        while ((len = is.read(buff))!= -1){

arrayOutputStream.write(buff,0,len);        }

is.close();        arrayOutputStream.close();

return arrayOutputStream.toByteArray();

}}

重点:不要设置setDoOutput(true),post请求上传参数得设置为true;它默认为false:  urlConn.setDoOutput(false);

参考博客:  http://blog.csdn.net/ameyume/article/details/6528205
时间: 2025-01-04 19:08:42

HttpURLConnection下载图片的两种方式的相关文章

设置背景图片的两种方式,并解决手机端背景图片高度自适应问题

1 设置背景图片的两种方式: 方式一: <img src="../img/10.jpg"/ class="back" id="Background"> .back{ position: fixed; width: 100%; height: 100%; display: block; z-index: -100; } 方式二:div class="body" id="Background">

UIImage加载本地图片的两种方式

UIImage加载图片方式一般有两种: (1)imagedNamed初始化:默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片对象,则从指定地方加载图片然后缓存对象,并返回这个图片对象. (2)imageWithContentsOfFile初始化:则仅只加载图片,不缓存. 大量使用imageNamed方式会在不需要缓存的地方额外增加开销CPU的时间来做这件事.当应用程序需要加载一张比较大的图片并且使用一次性,那么其实是没有

UIImage创建图片的两种方式的区别

在工作中经常会遇到添加图片,用哪种方式添加更好呢?请看详解 方法一: UIImage *image = [UIImage imageNamed:@"haha"]; 这种方法创建的图片是从缓存中获取的,程序会先从缓存中查找是否有这张图片,如果有的话就加载,如果没有的话,会将图片添加到缓存再使用.这样的创建方式一般用于经常使用的使用,因为从缓存中添加图片会更快一些,节省时间.但是缺点是一旦添加到缓存中就不会被释放,如果图很多很大需要占用很多很大的内存空间. 方式二: NSString *p

添加图片的两种方式

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>js练习 js是脚本语言直接运行在浏览器上的.</title> <script type="text/javascript"> function addcontent(){ document.getElementById(&q

git下载代码的两种方式以及eclipse集成git

1.第一种使用tortoiseGit插件: 链接:https://pan.baidu.com/s/1ANDydwfaaVcUaqZDJWc_BQ 提取码:qgxt a.首先在setting中的Git中添加user&email b.通过git clone填写url和branch,选择下载工程的不同分支上的代码 2.通过 git bash here命令的方式 git软件获取方式: 链接:https://pan.baidu.com/s/1Qo5viRxpLmtzLd8JTmpszw 提取码:g2fd

button上加上图片的两种方式

////  ViewController.m//  UIButtonDemo////  Created by hehe on 15/9/15.//  Copyright (c) 2015年 wang.hehe. All rights reserved.// #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {   

获取远程文章内容时,显示图片的两种方式

第一种: 通过Html.fromHtml(String,ImageGetter,tagHandler) CharSequence text = Html.fromHtml(capter, new ImageGetter() {                                        @Override                    public Drawable getDrawable(String source) {                        

C++服务器下载文件的两种方式

#include <afxinet.h>#include "wininet.h" #pragma comment( lib, "wininet.lib" ) string remoteIP = "http://www.test.com:8001"; string testIP = getDomain("IP"); string testPort = getDomain("PORT"); if (

android/IOS常用图片上传的两种方式

android/IOS常用图片上传的两种方式: 1.上传到服务器的文件服务器(FileServer) 原理:上传到文件服务器的方式是先在服务器端搭建文件服务器,配置好路径(url),该路径是我们待会上传图片的路径,配置成功后便通过http+post的模式上传到文件服务器,同时文件服务器将返回一个图片ID,这个ID就是图片的唯一标识,并将该ID写入数据库保存,当需要下载该图片时只需要将此ID带上即可. 两个核心问题: (1)服务端:配置FileServer,并写处理响应上传图片的代码,这个值得去网