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的服务端,文件 ...
随机推荐
- NetAnalyzer笔记 之 七 NetAnalyzer2016使用方法(1)
[创建时间:2016-04-17 14:47:00] NetAnalyzer下载地址 距离新本的NetAnalyzer已经发布一段时间了,因为比较忙期间只出了一个视频教程,一直没有来的急写文档,今天就 ...
- PhoneGap 和 PhoneGap Build 是什么?
PhoneGap是目前唯一支持7种平台的开源移动开发框架,支持的平台包括iOS.Android.BlackBerry OS.Palm WebOS.Windows Phone 7.Symbian和Bad ...
- android 银行卡。。空格输入
class myWatcher implements TextWatcher { int beforeTextLength = 0; int onTextLength = 0; boolean isC ...
- NOTIFYICONDATA结构
//农机调度项目代码 NOTIFYICONDATA m_notifyData; m_notifyIcon.ChangeIcon(IDI_PAUSE, _T("监控终端server已暂停&qu ...
- [Regex Expression] Find Sets of Characters
Regular Expression Character Classes define a group of characters we can use in conjunction with qua ...
- C#调用Java代码
c#直接调用java代码,需要ikvmbin-0.44.0.5.zip.下载地址: http://pan.baidu.com/share/link?shareid=3996679697&uk= ...
- WebApi2官网学习记录--HttpClient Message Handlers
在客户端,HttpClient使用message handle处理request.默认的handler是HttpClientHandler,用来发送请求和获取response从服务端.可以在clien ...
- Oracle instr 及 like
原文: http://www.cnblogs.com/crazyjava/archive/2012/10/31/2748202.html instr(string1,string2[,start_po ...
- "客户端无法连接到远程计算机"错误的解决方法
问题: 客户端无法连接到远程计算机. 可能没有启用远程连接或者计算机太忙不能接受新的连接. 也可能是网络问题阻止连接.请稍后重新尝试连接. 如果问题仍然存在 请与管理员联系. 解决方法: 1.首先确认 ...
- C#计算当前日期为一年中的第几周
方法一: private int WeekOfYear(string date) { DateTime curDay = Convert.ToDateTime(date); i ...