前言:这篇文章用到了Android的handler机制,对于handler机制我也还没搞得太清楚,只能先把相关的几个帖子贴上,大家先看看吧,等后面理解了再仔细讲讲,最后我另外给出了用android原生HttpURLConnection是怎样来下载并显示图片的,但这种方法一般不用,所以我也就不讲了,如果想看就看源码吧

上效果图:

    

配置AndroidManifest.xml

添加互联网访问权限

 

XML代码:

<?xml version="1.0" encoding="utf-8"?>                                            

一、使用httpClient实现下载图片

android代码: 

/** * @author harvic * @date 2013-12-27 *  */package com.example.try_downloadimage_httpclient;import java.io.InputStream;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.view.View;import android.widget.Button;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.ProgressBar;public class MainActivity extends Activity {//服务器上的图片地址private static final String picURL="http://222.195.151.19/1.jpg";private Button btnFirst;private FrameLayout frameLayout;private Bitmap bitmap=null;private ProgressBar progress;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); btnFirst=(Button)this.findViewById(R.id.btnFirst); frameLayout=(FrameLayout)this.findViewById(R.id.frameLayout); progress=(ProgressBar)this.findViewById(R.id.progress); btnFirst.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubprogress.setVisibility(View.VISIBLE);//显示PrograssBar// 启动一个后台线程handler.post(new Runnable() {@Overridepublic void run() {DefaultHttpClient httpclient = new DefaultHttpClient();HttpGet httpget = new HttpGet(picURL);try {HttpResponse resp = httpclient.execute(httpget);//判断是否正确执行if (HttpStatus.SC_OK == resp.getStatusLine().getStatusCode()) {//将返回内容转换为bitmapHttpEntity entity = resp.getEntity();InputStream in = entity.getContent();bitmap = BitmapFactory.decodeStream(in);//向handler发送消息,执行显示图片操作Message msg = new Message();msg.what = 1;handler.sendMessage(msg);}} catch (Exception e) {e.printStackTrace();setTitle(e.getMessage());} finally {httpclient.getConnectionManager().shutdown();}}});}});}/** 这里重写handleMessage方法,接受到子线程数据后更新UI **/private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:// 关闭ImageView view = (ImageView) frameLayout.findViewById(R.id.image);view.setImageBitmap(bitmap);progress.setVisibility(View.INVISIBLE);//隐藏PrograssBarbreak;}}};}

注意:

1、这里用的是本地服务器,也就是我的电脑,所以你要把IP地址改成你自己的IP地址;

 2、这里用到了handler机制,具体的我也还没弄清楚,分享两个网址:

http://linluan55.blog.163.com/blog/static/175542399201110153463382/

http://www.cnblogs.com/dawei/archive/2011/04/09/2010259.html 

(源码见最底部)

二、使用android原生接口实现

 效果图:

 

 1、XML与上例相同

 2、android代码

package com.example.try_asyncloadimage_1;/** * 完成下载图片功能 *  */import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.app.ProgressDialog;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.ProgressBar;public class MainActivity extends Activity implements OnClickListener{private static final String picURL="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Hukou_Waterfall.jpg/800px-Hukou_Waterfall.jpg";//private static final String picURL="http://222.195.151.19/1.jpg";private Button btnFirst;private ProgressBar progress;private FrameLayout frameLayout;private Bitmap bitmap=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); btnFirst=(Button)this.findViewById(R.id.btnFirst); progress=(ProgressBar)this.findViewById(R.id.progress); progress.setVisibility(View.GONE); frameLayout=(FrameLayout)this.findViewById(R.id.frameLayout); btnFirst.setOnClickListener(this);}/** 这里重写handleMessage方法,接受到子线程数据后更新UI **/private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:// 关闭ImageView view = (ImageView) frameLayout.findViewById(R.id.image);view.setImageBitmap(bitmap);break;}}};// 前台ui线程在显示ProgressDialog,// 后台线程在下载数据,数据下载完毕,关闭进度框@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.btnFirst:// 启动一个后台线程handler.post(new Runnable() {@Overridepublic void run() {// 这里下载数据try {URL url = new URL(picURL);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setDoInput(true);conn.connect();InputStream inputStream = conn.getInputStream();bitmap = BitmapFactory.decodeStream(inputStream);Message msg = new Message();msg.what = 1;handler.sendMessage(msg);} catch (MalformedURLException e1) {e1.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});break;}}}

源码来啦,这两个例子的源码我都放在一起了,

源码地址:http://download.csdn.net/detail/harvic880925/6777015(不要分,仅供分享)

 

请大家尊重原创都版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/17609771


更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. 使用 Android(安卓)自带的 proguard 混淆源码
  5. 详解Android(安卓)Activity之间跳转出现短暂黑屏的处理方法
  6. Android开发者确保应用程序运行的四大组件
  7. android中自定义ListView界面
  8. Android(安卓)SQLite学习
  9. Android(安卓)AsyncTask使用以及源码解析

随机推荐

  1. [原] Android持续优化 - 提高流畅度
  2. Android(安卓)UI 之CheckBox的妙用
  3. 【Android】Android的与服务器端传送信息
  4. android 中如何添加新的键值
  5. Android属性动画完全解析(下) Interpolat
  6. 【项目中】Android(安卓)小米红米手机无
  7. 嵌入式设备Android带来的奇迹
  8. Android(安卓)使用 Jenkins 实现自动化打
  9. 在Android中,如何判断当前是否在桌面上
  10. Android(安卓)官方架构组件 Navigation