在上一章中谈到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. linux系统下安全管理

    1.引导程序安全 linux系统的root密码是很容易破解的,当然前提是你没有设置引导程序密码,如GRUB或LILO,为了防止通过引导程序破译root密码,强烈建 议设置GRUB或LILO的引导密码, ...

  2. 可以使用QT给龙芯开发软件

    直接apt-get install libqt5core5a就有了,也许是一个很好的小众市场机会呢 至于系统,可以使用debian mips https://www.debian.org/devel/ ...

  3. ORACLE RAC中的oc4j和gsd资源以及RAC相关的进程

    1.RAC相比单实例数据库多出的进程: LMS - Gobal Cache Service Process 全局缓存服务进程 LMD - Global Enqueue Service Daemon 全 ...

  4. mysl lock table read

    <pre name="code" class="html">Session 1: mysql> use zjzc; Reading table ...

  5. Android SoundPool 的使用以及原理分析

    好吧,我们今天来聊聊SoundPool这东西. 据说这个东西是冰激凌(Android4.0)里才引入的一个新东西.按照官方的意思大多数情况下是给游戏开发用的,比如一个游戏10关,它能在游戏开始前一次加 ...

  6. hdu 1011 Starship Troopers (树形背包dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接 : hdu-1011   题意 有n个洞穴编号为1-n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即 ...

  7. ViewDragHelper练习使用

    转载博客地址:http://www.cnblogs.com/flyme2012/p/4076674.html 这个Demo是用来练习VIewDragHelper的,也是仿照网上一个大神的代码.我通过他 ...

  8. OpenCV系列--摄像头控制的简单代码

    操作系统:windows xp 开发工具:VS2008 opencv版本:2.1.0 依赖库:OpenCV2.1\lib\highgui.lib #include "cv.h" # ...

  9. 从C++对象内存布局和构造过程来具体分析C++中的封装、继承、多态

    一.封装模型的内存布局 常见类对象的成员可能包含以下元素: 内建类型.指针.引用.组合对象.虚函数. 另一个角度的分类: 数据成员:静态.非静态 成员函数:静态.非静态.虚函数 1.仅包含内建类型的场 ...

  10. jQuery 源码分析和使用心得 - 文档遍历 ( traversing.js )

    jQuery之所以这么好用, 首先一点就是$()方法和它强大的选择器. 其中选择器使用的是sizzle引擎, sizzle是jQuery的子项目, 提供高效的选择器查询. 有个好消息告诉大家, 就是s ...