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的服务端,文件 ...
随机推荐
- 自己意淫的一个简陋的Python网站扫描器
使用的模块 threading.optparse.urllib2 本地需要放字典,名字需大写. 上代码 def request(url,pathName): try: import urllib2 p ...
- ASP.NET简单文件上传
一>使用FileUpload控件,将其拖入页面: <%@ Page Title="hehe" Language="C#" MasterPageFil ...
- Android Fragment详解(五):Fragment与Activity通讯
与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例. Fragment可 ...
- Entity Framework - Func引起的数据库全表查询
原文:http://www.cnblogs.com/dudu/archive/2012/04/01/enitity_framework_func.html 使用 Entity Framework 最要 ...
- 应用highcharts做直观数据统计
最近在看上了统计类的东东,发现以前端图表神器:highcharts Highcharts是一款功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯Js图表库,Highcharts支持的图表类型有直线 ...
- 用web技术开发出原生的App应用的体会(1)
本人是是个前端小白,学前端已经有半年的时间了,前几天开了个博客,希望记录自己学习历程的点滴. 今天要写的是关于用html,css,javascript等web技术开发原生的app应用. 总所周知,we ...
- .NET开发人员必须知道的八个网站
对于不熟悉.NET技术的朋友,需要说明一下,.NET提供了一个平台和一些相应的工具,.NET开发人员可以使用它们来在开发Windows桌面,互联网,甚至是手持移动设备上构建极富交互性的应用.很有可能你 ...
- WebApi2官网学习记录---OData中的查询
EMD安全 查询语法是基于entity data model(EDM),不是基于底层的model类型,可以从EDM排除一个属性,这样这个属性在client就不能被查询了. 有两种方式可以从EDM中排除 ...
- C#属性和readonly类型
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- BZOJ 1003 物流运输 (动态规划 SPFA 最短路)
1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 5590 Solved: 2293 [Submit][Stat ...