AsyncTask实现下载图片
实现效果:


/*采用异步任务 AsyncTask<String,Integer, byte[]>
* 参数一代表 执行异步任务时传递的参数的类型
* 参数二 如果不采用进度,则填Void,否则填 Integer
* 参数三 是指网络回传回来的数据类型
*/
客户端代码:
MainActivity.java
package com.example.load_jpg; import java.io.ByteArrayOutputStream;
import java.io.InputStream; import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
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 android.widget.Toast; public class MainActivity extends Activity { private ProgressDialog dialog;
private ImageView iv;
private Button btn;
private final static String PATH="http://172.16.30.146:8080/Phone/a10.jpg";
private Context context; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
init();
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new MyTask().execute(PATH);//执行异步任务
}
});
}
private void init() {
iv =(ImageView) findViewById(R.id.image);
btn = (Button) findViewById(R.id.btn);
dialog = new ProgressDialog(context);
dialog.setCancelable(true);
dialog.setTitle("提醒");
dialog.setMessage("正在下载中...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
} public class MyTask extends AsyncTask<String, Integer, byte[]>{ @Override
protected void onPreExecute() {//在异步符务执行之前 这个方法会被执行
dialog.show();
super.onPreExecute();
} @Override
protected byte[] doInBackground(String... params) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(params[]); InputStream is = null;
ByteArrayOutputStream bos =new ByteArrayOutputStream(); try {
HttpResponse httpResponse = httpClient.execute(httpGet);//执行path
if(httpResponse.getStatusLine().getStatusCode()==){
is = httpResponse.getEntity().getContent(); long total_length = httpResponse.getEntity().getContentLength();
int current_length = ;
byte[] tmp = new byte[];
int len;
while((len=is.read(tmp))!=-){
current_length+=len;
int update = (int)((float)current_length/total_length*);
publishProgress(update);
bos.write(tmp, , len);
}
return bos.toByteArray(); }
} catch (Exception e) { }finally{
httpClient.getConnectionManager().shutdown();
} return null;
} @Override
protected void onProgressUpdate(Integer... values) {
dialog.setProgress(values[]);
super.onProgressUpdate(values);
} @Override
protected void onPostExecute(byte[] result) {
if(result!=null){
Bitmap bitmap = BitmapFactory.decodeByteArray(result, , result.length);
iv.setImageBitmap(bitmap);
Toast.makeText(context, "下载成功", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "下载失败", Toast.LENGTH_LONG).show();
}
dialog.dismiss();
super.onPostExecute(result);
} } }
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".LoadPicActivity" > <ImageView
android:id="@+id/image"
android:layout_width="300dp"
android:layout_height="300dp"
android:src="@drawable/ic_launcher"
/> <Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="下载" />
</LinearLayout>
服务器端:建立web project,放入图片即可
最后在清单里注册:<uses-permission android:name="android.permission.INTERNET"/>
AsyncTask实现下载图片的更多相关文章
- Android测试AsyncTask下载图片
package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...
- Android 异步任务——AsyncTask (附使用AsyncTask下载图片Demo)
我们编程的时候经常需要处理同步任务和异步任务,在Android里面存在一个特性,就是UI线程是不安全的线程.所谓UI线程不安全也就是我们的主线程(进程启动的第一个线程)不能在线程外操作主线程的资源.因 ...
- android 多线程 AsyncTask 下载图片
AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...
- Android多线程分析之五:使用AsyncTask异步下载图像
Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<An ...
- android 多线程下载图片
很多时候我们需要在Android设备上下载远程服务器上的图片进行显示,今天Android123整理出两种比较好的方法来实现远程图片的下载. 方法一.直接通过Android提供的Http类访问远程服 ...
- Android异步下载图片并且缓存图片到本地
Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...
- Android开发之异步获取并下载网络资源-下载图片和下载文本内容
在android网络开发过程中,经常需要获取网络资源,比如下载图片,下载文本文件内容等,这个时候就需要http请求来获取相应的网络资源.首先看看实例效果图: 下载图片截图 ...
- Android采用HttpClient下载图片
在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...
- HttpURLConnection 传输数据和下载图片
一.传输字符串数据 在Android中HttpURLConnection传输数据是必不可少的,我们继续在“AsyncTask(异步任务)”案例的基础上添加. 案例: 首先我们做一个jsp的服务端,文件 ...
随机推荐
- hdu 4983 Goffi and GCD(欧拉函数)
Problem Description Goffi is doing his math homework and he finds an equality on his text book: gcd( ...
- github atom 试用
github的编辑器atom 1.0已经出来了,在https://atom.io/ 我之前在win上一直用notepad++写了两年脚本.最近改写lua了,项目组统一用的sublime text.su ...
- pyqt lineedit右边显示按钮效果
from PyQt4 import QtGui, QtCore class ButtonLineEdit(QtGui.QLineEdit): buttonClicked = QtCore.pyqtSi ...
- JMeter简单性能测试(适合初学者)
利用JMeter进行Web测试 JMeter介绍 脚本录制 运行JMeter进行测试 JMeter主要组件介绍 参数化设置 动态数据关联 使用命令行运行JM ...
- app打包,发布(同步发生冲突)
1:打包步骤: 1:桌面建立一个文件夹,名字叫keystore 2:点击build下面的 ,如下: 3:会出现如下界面: 4:下一步: 5:如果有keystore,请点击 choose exi ...
- Java关键字transient和volatile
transient标记的变量,在进行序列化的时候,这个字段不进行序列化操作. volatile标记的变量,在进行读写时,必须强制的与内存同步,即在读的时候需要从内存中读取,写的时候也需要回写到内存中. ...
- 我永远的 dell 15r
陪伴我三年多的15r 让我疯狂过.努力过.更记录了我很多的成长,与很多个瞬间.看到它是有感情的.还记得第一次失去她.我好像失去了自己. 我是一个程序员.每个程序员都有自己的环境配置.不同的软件.就是 ...
- .Net调用Office Com组件的原理及问题检索com类工厂组件检索 COM 类工厂中 CLSID 为 {XXX} 的组件失败
我是在本地32位操作系统+vs2010+office2007做创建并下载Excel,ppt文件的操作没有问题,发布到64位系统的服务器上报错,最开始报错:: 1:Retrieving the COM ...
- silverlight visifire控件图表制作——silverlight 后台方法ControlChart.xaml.cs
一.构造方法ControlChart 1.前台页面控件赋值 //时间下拉框赋值,下拉框赋选定值 for (int ii = DateTime.Today.Year; ii ...
- IOS — 关于Socket传输文件需要自定义延时或者包大小的情况
1. 首先导入头文件 #include <stdio.h> #include <errno.h> #include <string.h> #include < ...