package com.shamusoft.asynctask;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
String URL = "http://60.28.186.211/lyn/blue.zip";
TextView tv;
TextView tv2;
ProgressBar pb;
Handler _handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) this.findViewById(R.id.tv);
tv2 = (TextView) this.findViewById(R.id.tv2);
pb = (ProgressBar) this.findViewById(R.id.firstBar);
_handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
tv2.setText("服务器异常");
}};
Masynctask task = new Masynctask();
task.execute(URL);
}
@SuppressWarnings("rawtypes")
public class Masynctask extends AsyncTask {
@Override
protected Object doInBackground(Object... params) {
Log.i("XX", "doInBackground");
try {
downLoad(URL);
} catch (Exception e) {
_handler.sendEmptyMessage(0);
// throw new RuntimeException();
}
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// 任务启动,可以在这里显示一个对话框,这里简单处理
pb.setVisibility(0);
tv.setText("开始下载");
Log.i("XX", "onPreExecute");
}
@Override
protected void onPostExecute(Object result) {
tv.setText("下载完毕");
Log.i("XX", "onPostExecute");
}
@Override
protected void onProgressUpdate(Object... values) {
// 更新进度
pb.setProgress((Integer) values[0]);
tv2.setText("下载进度:" + values[0] + "%");
}
@SuppressWarnings("unchecked")
public void downLoad(String url) throws ClientProtocolException, IOException {
HttpClient client = getHttpClient();
HttpGet httpGet = new HttpGet(url);
int pro = 0;
HttpResponse httpResponse = client.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
int code = httpResponse.getStatusLine().getStatusCode();
Log.i("XX","code:"+code);
float length = entity.getContentLength();
InputStream is = entity.getContent();
if (is != null) {
File file = new File(
android.os.Environment
.getExternalStorageDirectory()
+ "/blue.zip");
if (file.exists()) {
file.delete();
}
file.createNewFile();
FileOutputStream out = new FileOutputStream(file);
byte[] buf = new byte[128];
int ch = -1;
int count = 0;
while ((ch = is.read(buf)) != -1) {
count += ch;
if (length > 0) {
pro = (int) (count * 100 / length);
publishProgress(pro);
}
out.write(ch);
}
is.close();
out.close();
}
}
private static final int REQUEST_TIMEOUT = 10 * 1000;// 设置请求超时10秒钟
private static final int SO_TIMEOUT = 10 * 1000; // 设置等待数据超时时间10秒钟
public HttpClient getHttpClient() {
BasicHttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,
REQUEST_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParams, SO_TIMEOUT);
HttpClient client = new DefaultHttpClient(httpParams);
return client;
}
}
}
分享到:
相关推荐
"Ajax异步上传(带进度条)"就是一种能够提供流畅用户体验的上传方式,它允许用户在不刷新整个页面的情况下进行文件上传,并通过进度条实时显示上传进度。这种方式相比传统的表单提交方式,用户体验更佳,因为它避免...
在IT领域,尤其是在软件开发和用户体验设计中,文件下载带进度条的功能是非常实用且不可或缺的。这个特性能够让用户直观地了解文件下载的状态,提供更好的交互体验。标题中的“文件下载带进度条的哦很实用”强调了这...
在WinForm中,比如一些文件传输和一些费时的操作,如果处理不好就会造成“假死”的情况,为此我们可以采用进度条进行友好提示。 BackgroundWorker类是.net 2.0里新增加的一个类,对于需要长时间操作而不需要用户长...
unity实现场景异步加载并带有加载的进度条,实现场景平稳加载,返回的加载进度为匀速加载。非常适合用在要加载大型场景的情况下。
"利用Ajax+Jquery实现异步进度条效果"这个主题正是围绕这一目标展开,它涉及到C#后端开发、.NET框架、Ajax技术以及Jquery库的前端应用。下面将详细阐述这些知识点。 首先,C#是一种面向对象的编程语言,广泛应用于...
此项目中的“http下载带进度条”可能是指使用类似的方法实现HTTP下载,主要区别在于使用`HttpWebRequest`和`HttpWebResponse`类代替`FtpWebRequest`和`FtpWebResponse`,其他步骤基本相同。 总的来说,这个项目展示...
在IT领域,文件异步上传和进度条显示是常见的用户交互功能,特别是在Web应用程序中。这一功能提高了用户体验,因为用户可以继续浏览其他页面或者执行其他操作,而不必等待文件上传的完成。以下是对这一主题的详细...
压缩包中的`TestFileDownLoad`文件可能是实现带进度条下载的一个示例代码。为了进一步学习,你可以查看这个文件,了解它是如何处理线程同步、进度更新以及可能的异常情况的。同时,理解代码的工作原理可以帮助你更好...
用于调用进度条类,多线程显示结果,否则进度条不会刷新
在Java Web开发中,实现一个带进度条的异步上传功能是常见的需求,尤其是在处理大文件上传时,用户界面的反馈至关重要。这个“java带进度条的异步上传”示例利用了Servlet、Ajax以及可能的JavaScript库,如jQuery,...
为了提供更好的用户体验,...通过上述方法,我们可以实现一个既实用又直观的HTTP下载带进度条的功能,提高用户在下载大文件时的体验。同时,这种技术也可以应用于其他需要实时反馈进度的场景,如上传文件、视频流等。
在IT行业中,尤其是在Web开发和移动应用开发领域,“上传下载带进度条”是一个常见的功能需求。用户在上传或下载大文件时,为了提供良好的用户体验,通常会显示一个进度条来实时展示任务的完成状态。这一功能涉及到...
这个话题“图片异步加载(带进度条)+二级缓存+图片手势缩放+ViewPaper+设置壁纸”涵盖了许多Android应用中常见的图片处理技术。下面将详细解释这些知识点。 1. **图片异步加载**: 在Android应用中,为了提供流畅...
本教程将详细介绍如何使用Prototype库实现一个带有进度条的异步文件上传功能,并涉及到后台代码的支持。 首先,我们需要理解Prototype的核心概念。Prototype通过扩展JavaScript的内置对象,如Array、Function和...
根据给定的信息,本文将详细解释“显示异步进度条”的相关知识点,包括自定义进度条的形式、如何利用委托支持异步加载等技术要点。 ### 显示异步进度条 在开发用户界面时,为了提升用户体验,我们经常需要在执行...
这里的"asp.net 异步 上传控件(带进度条)"指的是一个专为ASP.NET平台设计的控件,它支持异步上传方式,并且在上传过程中显示进度条,提供了更好的用户体验。对于IE6及以上的浏览器,这个控件都能正常工作,这意味...
总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...
在C#编程中,异步进度条操作是一个关键的用户界面(UI)更新技术,它允许在后台执行耗时操作的同时,保持用户界面的响应和更新进度信息。本主题将深入探讨如何使用C#实现这样的功能,特别是涉及`BackgroundWorker`...
标题中的“c# 多线程 异步进度条”涉及到两个关键概念:多线程和异步进度条显示。在多线程环境下,多个任务可以在不同的线程上同时运行,每个任务都拥有独立的执行流。而异步进度条是一种UI组件,用于向用户提供关于...