Android使用HttpClient下载图片
16lz
2022-08-06
在前一章中讲的是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);// 如果服务器响应的是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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initWidgets();task = new downloadImageTask();}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.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);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (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> {@Overrideprotected Boolean doInBackground(String... params) {// TODO Auto-generated method stubSystem.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return true;}// 下载完成回调@Overrideprotected void onPostExecute(Boolean result) {// TODO Auto-generated method stubimage.setImageBitmap(mDownloadImage);System.out.println("result = " + result);super.onPostExecute(result);}// 更新进度回调@Overrideprotected void onProgressUpdate(Integer... values) {// TODO Auto-generated method stubsuper.onProgressUpdate(values);}}}如果图片较大可能会下载失败
Demo: http://download.csdn.net/detail/deng0zhaotai/7326167
更多相关文章
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- android 使用html5作布局文件: webview跟javascript交互
- Android(安卓)Resource介绍和使用
- "Failed to fetch URL https://dl-ssl.google.com/android/repos
- 使用NetBeans搭建Android开发环境
- android 零星调试笔记