httpClient及android 原生接口实现下载并显示图片
来源:互联网 发布:linux 图片编辑器 编辑:程序博客网 时间:2024/04/27 09:04
前言:这篇文章用到了Android的handler机制,对于handler机制我也还没搞得太清楚,只能先把相关的几个帖子贴上,大家先看看吧,等后面理解了再仔细讲讲,最后我另外给出了用android原生HttpURLConnection是怎样来下载并显示图片的,但这种方法一般不用,所以我也就不讲了,如果想看就看源码吧
上效果图:
配置AndroidManifest.xml
添加互联网访问权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
XML代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/btnFirst" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="异步下载方式一" > </Button> <FrameLayout android:id="@+id/frameLayout" android:layout_width="fill_parent" android:layout_height="match_parent" ><!-- 用于显示加载的图片 --> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="2dp" android:scaleType="centerInside" > </ImageView> <ProgressBar android:id="@+id/progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" android:layout_gravity="center" > </ProgressBar> </FrameLayout></LinearLayout>
一、使用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
2 0
- httpClient及android 原生接口实现下载并显示图片
- android上传图片及下载图片并显示
- android开发实现下载网页图片到本地并显示
- android下载网络图片并显示
- android 下载图片到本地并显示
- Android使用HttpClient实现下载,并监控进度
- Android使用HttpClient下载图片
- android-下载保存网络图片并显示下载进度条
- Android实现多线程下载并显示通知
- Android中从网上下载一张图片显示进度并显示下载好的图片
- android 从网页上下载图片并显示出来.
- Android ImageView 显示网络图片并下载保存
- android异步下载图片并显示水平进度条
- Android 从网上下载图片并显示到ListView上
- Android 使用URL下载图片到本地并显示
- android-HttpURLConnection+Handler+Thread下载图片并显示
- Android 通过开源框架实现加载网络图片并下载到SD卡通知系统相册显示,(并实现分享图片功能)
- 原生js上传图片并显示图片名称
- 一位互联网人对圈子的理解。。。
- ubuntu中用eclipse写c的多线程添加库
- 一年读书记
- hibernate 版本(version)控制
- 什么时候用startService,什么时候用bindService
- httpClient及android 原生接口实现下载并显示图片
- 空间点过程与随机测度(一):从数星星说起
- Android实现推送方式解决方案
- 负分开发个管理股股股票关于鼓励过衣服发广告和管理管理管理管理规划给个
- Problem 2148 Moon Game --福州大学
- NSNotification 同步执行、异步执行
- jtag.ulink,jlink 区别
- Cygwin编译成库文件(.lib)并且在win7下qtcreator 调用的方法
- 快速开发