在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片

HttpURLConnection与HttpClient的差别:

HttpClient是个非常不错的开源框架(org.appache.http),封装了訪问http的请求头,參数,内容体。响应等等,使用起来更方面更强大。

HttpURLConnection是java的标准类,能够实现简单的基于URL请求、响应功能,什么都没封装。用起来太原始。比方重訪问的自己定义,以及一些高级功能等。

还是在上一章的基础上加入HttpClient

关键下载代码

/**
* 通过Get获取网页内容
*
* @param url
* 如:http://preview.quanjing.com/is002/ev601-025.jpg
* @return
* @throws ClientProtocolException
* @throws IOException
* @date 2014.05.10
*/
public static Bitmap getHttpGetBitmap(String url)
throws ClientProtocolException, IOException {
Bitmap bitmap = null;
// 新建一个默认的连接
HttpClient client = new DefaultHttpClient();
// 新建一个Get方法
HttpGet get = new HttpGet(url);
// 得到网络的回应
HttpResponse response = client.execute(get); // 假设server响应的是OK的话! if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
InputStream is = response.getEntity().getContent();
bitmap = BitmapFactory.decodeStream(is);
is.close();
}
return bitmap;
}

訪问互联网权限

<uses-permission android:name="android.permission.INTERNET" />

Activity下载代码

package com.dzt.downloadimage;

import java.io.IOException;
import java.net.MalformedURLException; import org.apache.http.client.ClientProtocolException; import android.app.Activity;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView; import com.dzt.downloadimage.utils.HttpUtils; public class MainActivity extends Activity implements OnClickListener { private Bitmap mDownloadImage = null;
private ImageView image = null;
private downloadImageTask task;
private boolean _isExe = false; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWidgets();
task = new downloadImageTask();
} @Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if (_isExe) {
task.cancel(true); // 取消操作
}
} private void initWidgets() {
image = (ImageView) findViewById(R.id.img);
Button btn = (Button) findViewById(R.id.download_btn);
btn.setOnClickListener(this);
} @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.download_btn:
if (!_isExe) {
task.execute("http://preview.quanjing.com/is002/ev601-025.jpg"); // 运行异步操作
_isExe = true;
}
break; default:
break;
}
} class downloadImageTask extends AsyncTask<String, Integer, Boolean> { @Override
protected Boolean doInBackground(String... params) {
// TODO Auto-generated method stub
System.out.println("[downloadImageTask->]doInBackground "
+ params[0]);
// try {
// mDownloadImage = HttpUtils.getNetWorkBitmap(params[0]);
// } catch (MalformedURLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
mDownloadImage = HttpUtils.getHttpGetBitmap(params[0]);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
} // 下载完毕回调
@Override
protected void onPostExecute(Boolean result) {
// TODO Auto-generated method stub
image.setImageBitmap(mDownloadImage);
System.out.println("result = " + result);
super.onPostExecute(result);
} // 更新进度回调
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
} }
}

假设图片较大可能会下载失败



Demo:http://download.csdn.net/detail/deng0zhaotai/7326167

版权声明:本文博主原创文章,博客,未经同意不得转载。

Android采用HttpClient下载图片的更多相关文章

  1. Android测试AsyncTask下载图片

    package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...

  2. Android 本地/网路下载图片实现放大缩小

     Android 本地加载/网路下载图片实现放大缩小拖拉效果,自定义控件. package com.example.ImageViewCustom; import android.app.Activi ...

  3. Android 采用HttpClient提交数据到服务器

    在前几篇文章中<Android 采用get方式提交数据到服务器><Android 采用post方式提交数据到服务器>介绍了android的两种提交数据到服务器的方法 本文继续介 ...

  4. Android使用HttpURLConnection下载图片

    讲到http就必须要了解URI和URL URI (uniform resource identifier)统一资源标志符: URL(uniform resource location )统一资源定位符 ...

  5. android 多线程 AsyncTask 下载图片

    AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...

  6. android 通过httpclient下载文件并保存

    代码:(主要针对图片.gif下载无问题) /** * 下载网络文件 * @param url 请求的文件链接 * @param IsMD5Name 是否MD5加密URL来命名文件名 * @param ...

  7. Android 使用AsyncTask 下载图片的例子,学会使用AsyncTask

    1.添加布局文件:activity_main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...

  8. 【Android 应用开发】Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载

    19af543b068bdb7f27787c2bc69aba7f Additional Download (32-, 64-bit) Package r10 STL debug info androi ...

  9. Android下载图片/调用系统相机拍照、显示并保存到本地

    package com.example.testhttpget; import java.io.BufferedReader; import java.io.FileNotFoundException ...

随机推荐

  1. Qt for Android遇到的几个错误解决[Win7 + Qt5.6 +jdk 8u91]

    [1]SDK Manager无法更新Android SDK安装后需要运行SDK Manager下载安装包,默认从google网站下载,但被GWF和谐了,感谢一位网友提供的镜像站点.具体步骤是:运行SD ...

  2. Codeforces 339E

    #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> # ...

  3. 合并多个Redis dump.rdb 到一个rdb的多个database

    公司的服务器上运行了多个redis,现在希望合并到一个redis,用上redis的多database特性. 在网上找了一圈发现没有比较好的工具可以进行这个处理. 看过一个redis-dump号称可以导 ...

  4. LDA(latent dirichlet allocation)

    1.LDA介绍 LDA假设生成一份文档的步骤如下: 模型表示: 单词w:词典的长度为v,则单词为长度为v的,只有一个分量是1,其他分量为0的向量         $(0,0,...,0,1,0,... ...

  5. 使用扩展名获取mimetype

    在Android中很多时候我们需要计算出文件的mimetype,而我们通常的思路就是通过扩展名来获取对应的mimetype,而如果自行处理,将维护一个比较大的映射表,而实际上大可不必,Android提 ...

  6. java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨

    java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类.内部类应用于泛型探讨 //Sets.java package org.rui.generics.set; import j ...

  7. C#.NET学习笔记1---C#.NET简介

    C#.NET学习笔记1---C#.NET简介 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com -------------- ...

  8. Eclipse和PyDev搭建python开发环境

                   Eclipse和PyDev搭建python开发环境 1.1整体目标 本文档作为python学习者的新手教程,通过本教程能够了解python用途.语法.在实际工作中的应 ...

  9. 从汇编来看i++与++i

    故事背景,一个正在c语言的家伙,问我++i 和 i++的问题,我当时由于要去上课没给他说,正好今晚有空就測试了一下例如以下代码: 编译环境:VS2010  语言:C++ #include <io ...

  10. JavaScript 工作必知(九)function 说起 闭包问题

    大纲 Function Caller 返回函数调用者 Callee 调用自身 作用域 闭包 function 函数格式 function getPrototyNames(o,/*optional*/ ...