- 浏览: 142696 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (172)
- java (172)
- c# winform 关于窗体最大化时的是否全屏效果与是否遮盖任务栏 (1)
- c# winform 只运行一个程序实例 (1)
- Shiro权限框架 (1)
- Java字节码(.class文件)的代码解析 (1)
- Hibernate、Spring和Struts工作原理及使用理由 (1)
- 基本PKG处理命令 (1)
- 最近写的代码的小结 (1)
- Dual Palindromes (1)
- 编译TortoiseSVN1.7源代码笔记 (1)
- Android项目代码混淆 (1)
- 关于就业叨咕几句 (1)
- Java重定向System.out和System.err (1)
- IHS与WAS集成插件静默安装 (1)
- 专题地图概述 (1)
- 关于MapXtreme2004附带Sample不能运行的问题 (1)
- SQL注入漏洞 (1)
- 回顾过去 展望未来(写给自己) (1)
- DB2认证考试经验谈(700&&701) (1)
- 今天用到了RM格式文件的分割工具RealProducer (1)
- 搜索引擎还是很有发展前途的 (1)
- 泰利德破解,实现学校机房免费上网 (1)
- Arduino 引言:移动互联外设传感展望 (1)
- c/c++ static 用法总结(三版本合一) (1)
- JQuery与xml的组合谈 (1)
- Android开发之消息处理机制(一)——Handler (1)
- Android开发之PopupWindow (1)
- 解析BitmapData.getPixel32()返回值因何不准确 (1)
- 关于Ext引用js的顺序问题 (1)
- Js事件大全 (1)
- 使用JavaFX2.0编写国际象棋游戏 (1)
- Hibernate/JPA常见异常分析与解决 (1)
最新评论
-
amcucn:
这排版看得
Shiro权限框架 -
WAMING5:
这也太紧凑了,眼看花了
Shiro权限框架 -
longzhun:
大虾 ,看得出你很懒啊!发个贴 这样子怎么看!!!
Shiro权限框架 -
swanky_yao:
活干的不细!!
Spring+Hibernate框架下Mysql读写分离、主从数据库配 -
饶首建:
不错,不过用处比较少吧
批处理设ip和dns
做了个小例子,是关于android文件下载过程中进度条的实现,有些地方还有不当的地方,其中文件下载部分是参考mars老师的代码的,有兴趣可以去关注一下mars老师,http://www.mars-droid.com
代码写的比较乱,建议去看看mars老师的视频。
多话不说直接上代码了:
main.xml页面布局文件:
fileutils.java
下面是运行的结果图:
<br><img src="http://dl.iteye.com/upload/attachment/542902/436e7a0a-9d1e-382d-acfe-ec03476fb174.jpg" alt=""><br> 正在下载:
<br><img src="http://dl.iteye.com/upload/attachment/542904/5c500466-85e0-31d4-aa07-507d68d74e93.jpg" alt=""><br> 下载完成之后,我们在sdcard/music可以看到f.mp3文件
<br><img src="http://dl.iteye.com/upload/attachment/542907/728e1b4e-8dc4-36cf-ae1a-b4010f60f635.jpg" alt="" width="627" height="340"><br> 下面附上源码,可以自己修改,在例子中我是通过直接弹出的方式显示进度条的,这样在下载的时候我们就不能做其他的事情了,我们可以在布局文件中显示进度条,这样我们在下载的时候可以在文本框中输入一下内容,点击测试按钮之后文本框中的内容可以在上面的textview中显示出来。
<span style="color: #ff0000;">如果运行本例子,需要更改下载的url地址,我用的是百度的音乐下载,在测试中发现百度每次生成的连接只能下载一次。</span>
代码写的比较乱,建议去看看mars老师的视频。
多话不说直接上代码了:
main.xml页面布局文件:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><textview android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /><button android:id="@+id/downloadtextbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="下载文本文件"/><button android:id="@+id/downloadmp3button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="下载mp3文件"/><edittext android:id="@+id/edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请出输入文字!" android:lines="3"/><button android:id="@+id/textbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="测试"/></linearlayout>downloadactivity
public class downloadactivity extends activity { public static final int dialog_download_progress = 0;// public int filesize=0;// public int downloadfilesize=0; private textview textview; private button downloadtextbutton; private button downloadmp3button; private button textbutton; private edittext edittext; private progressdialog dialog = null; /** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); downloadtextbutton = (button) this.findviewbyid(r.id.downloadtextbutton); downloadmp3button = (button) this.findviewbyid(r.id.downloadmp3button); //添加监听 downloadtextbutton.setonclicklistener(new downloadtextbuttonlistener()); downloadmp3button.setonclicklistener(new downloadmp3buttonlistener()); textview = (textview) this.findviewbyid(r.id.textview); edittext = (edittext) this.findviewbyid(r.id.edittext); textbutton = (button) this.findviewbyid(r.id.textbutton); textbutton.setonclicklistener(new onclicklistener(){ @override public void onclick(view v) { textview.settext(edittext.gettext().tostring()); toast.maketext(downloadactivity.this, textview.gettext().tostring(), toast.length_long); } }); } @override protected dialog oncreatedialog(int id) { switch(id){ case dialog_download_progress: dialog = new progressdialog(this); dialog.setmessage("downloading…"); dialog.setprogressstyle(progressdialog.style_horizontal); dialog.setcancelable(false); dialog.show(); return dialog; default: return null; } } private handler handler = new handler(){ @override public void handlemessage(message msg) { if(!thread.currentthread().isinterrupted()){ switch(msg.what){ case 0: dialog.setmax(msg.arg1); break; case 1: dialog.setprogress(msg.arg1); break; case 2: dialog.dismiss(); break; case -1: string error = msg.getdata().getstring("error"); toast.maketext(downloadactivity.this, error, 1).show(); break; } } super.handlemessage(msg); } }; class downloadtextbuttonlistener implements onclicklistener{ /* (non-javadoc) * @see android.view.view.onclicklistener#onclick(android.view.view) */ @override public void onclick(view v) { // todo auto-generated method stub// httpdownloader httpdownloader = new httpdownloader();// string text = httpdownloader.download("http://zhangmenshiting.baidu.com/data/music/5789992/%e8%8d%b7%e5%a1%98%e6%9c%88%e8%89%b2.mp3?xcode=732ac4f76aeff611f08f3bb5c5f0aafe"); } } class downloadmp3buttonlistener implements onclicklistener{ /* (non-javadoc) * @see android.view.view.onclicklistener#onclick(android.view.view) */ @override public void onclick(view v) { //打开进度条 showdialog(dialog_download_progress); thread t = new thread(runnable); t.start(); } } runnable runnable = new runnable(){ @override public void run() { httpdownloader httpdownloader = new httpdownloader(); int result = httpdownloader.download(downloadactivity.this,"http://zhangmenshiting.baidu.com/data/music/5935874/%e6%ba%9c%e6%ba%9c%e7%9a%84%e6%83%85%e6%ad%8c.mp3?xcode=54e0a53865de98f9ba842c53eb1bf508", "music/", "e.mp3"); system.out.println(result); string str =null; if(result == 0){ str = "成功!"; }else if(result == 1){ str = "文件已存在!"; }else{ str = "失败!"; } // toast.maketext(downloadactivity.this, "下载结果"+str, toast.length_long).show(); } }; public void sendmsg(int flag,int value){ message message = new message(); message.what = flag; message.arg1 = value; handler.sendmessage(message); } }下面两个为下载的工具类:
fileutils.java
public class fileutils { private string sdpath; /** * */ public fileutils() { // todo auto-generated constructor stub //获得当前外部存储设备的目录 sdpath = environment.getexternalstoragedirectory()+"/"; } /** * 在sd卡上创建文件 * @param filename * @return */ public file createsdfile(string filename){ file file = new file(sdpath + filename); try { file.createnewfile(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } return file; } /** * 创建sd卡目录 * @param dirname * @return */ public file createsddir(string dirname){ file file = new file(sdpath + dirname); file.mkdir(); return file; } public boolean isfileexist(string filename){ file file = new file(sdpath + filename); return file.exists(); } public file writetosdfrominput(context context,string path,string filename,inputstream input){ file file = null; outputstream output = null; try { createsddir(path); file = createsdfile(path + filename); output = new fileoutputstream(file); byte[] buffer = new byte[4 * 1024]; int total = 0; while((input.read(buffer)) != -1){ total = total + buffer.length; output.write(buffer); //更新下载进度条 ((downloadactivity)context).sendmsg(1,total); } output.flush(); } catch (filenotfoundexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); }finally{ try { output.close(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } } //下载完成 ((downloadactivity)context).sendmsg(2,0); return file; } }httpdownloader.java
public class httpdownloader { private url url = null; /** * 根据url下载文件,前提是文件当中的内容为文本,返回值就是文件当中的内容 * @param urlstr * @return */ public string download(string urlstr){ stringbuffer buffer = new stringbuffer(); string line = null; bufferedreader reader = null; try { url = new url(urlstr); try { httpurlconnection conn = (httpurlconnection) url.openconnection(); reader = new bufferedreader(new inputstreamreader(conn.getinputstream())); while ((line = reader.readline()) != null) { buffer.append(line); } } catch (ioexception e) { log.e("io", "httpurlconnection -> ioexception"); e.printstacktrace(); } } catch (malformedurlexception e) { log.e("url","url -> malformedurlexception"); e.printstacktrace(); }finally{ try { reader.close(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } } return buffer.tostring(); } /** * 该函数返回整形: -1代表下载出错,0代表下载成功,1代表下载文件已存在 * @param urlstr * @param path * @param filename * @return */ public int download(context context,string urlstr,string path,string filename){ inputstream input = null; fileutils fileutils = new fileutils(); if(fileutils.isfileexist(path + filename)){ ((downloadactivity)context).sendmsg(2,0); return 1; }else{ try { input = getinputstreamfromurl(context,urlstr); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } file resultfile = fileutils.writetosdfrominput(context,path, filename, input); if(resultfile == null){ return -1; } } return 0; } public inputstream getinputstreamfromurl(context context,string urlstr) throws ioexception{ url = new url(urlstr); httpurlconnection conn = (httpurlconnection) url.openconnection(); inputstream s = conn.getinputstream(); ((downloadactivity)context).sendmsg(0,conn.getcontentlength()); return s; }}别忘记添加:
<uses-permission android:name="android.permission.internet"/> <uses-permission android:name="android.permission.write_external_storage" />
下面是运行的结果图:
<br><img src="http://dl.iteye.com/upload/attachment/542902/436e7a0a-9d1e-382d-acfe-ec03476fb174.jpg" alt=""><br> 正在下载:
<br><img src="http://dl.iteye.com/upload/attachment/542904/5c500466-85e0-31d4-aa07-507d68d74e93.jpg" alt=""><br> 下载完成之后,我们在sdcard/music可以看到f.mp3文件
<br><img src="http://dl.iteye.com/upload/attachment/542907/728e1b4e-8dc4-36cf-ae1a-b4010f60f635.jpg" alt="" width="627" height="340"><br> 下面附上源码,可以自己修改,在例子中我是通过直接弹出的方式显示进度条的,这样在下载的时候我们就不能做其他的事情了,我们可以在布局文件中显示进度条,这样我们在下载的时候可以在文本框中输入一下内容,点击测试按钮之后文本框中的内容可以在上面的textview中显示出来。
<span style="color: #ff0000;">如果运行本例子,需要更改下载的url地址,我用的是百度的音乐下载,在测试中发现百度每次生成的连接只能下载一次。</span>
发表评论
-
Hibernate/JPA常见异常分析与解决
2012-02-07 17:24 15141. ClassNotFoundException: ... -
使用JavaFX2.0编写国际象棋游戏
2012-02-07 16:24 1093前面发布了不少Javafx2的教程,不觉手痒,想尝试一 ... -
Js事件大全
2012-02-04 15:34 788一般事件 事件 ... -
关于Ext引用js的顺序问题
2012-02-02 15:49 768今天自己搞了个ext的helloworld,所需的包都 ... -
解析BitmapData.getPixel32()返回值因何不准确
2012-02-02 12:29 1004<div style="widt ... -
Android开发之PopupWindow
2012-01-31 13:48 1684<h1>Android开发之PopupWi ... -
Android开发之消息处理机制(一)——Handler
2012-01-11 15:19 1171<h1>Android开发之消息处理机制( ... -
JQuery与xml的组合谈
2011-12-21 17:18 804JQuery与xml的组合谈 今天谈的是XML,学ja ... -
c/c++ static 用法总结(三版本合一)
2011-12-21 10:34 819<span style="&qu ... -
Arduino 引言:移动互联外设传感展望
2011-12-20 14:08 1328作者:mznewfacer (Wolf Geek) ... -
泰利德破解,实现学校机房免费上网
2011-12-20 13:58 950泰利德破解,实现学校机房免费上网<br> ... -
搜索引擎还是很有发展前途的
2011-12-19 11:49 969相信大家已经听说,在头几天,搜狐推出了一个专业搜索门户 ... -
今天用到了RM格式文件的分割工具RealProducer
2011-12-19 09:19 713项目要加一些视频文件,这些视频都是几个老师对数据结构课 ... -
DB2认证考试经验谈(700&&701)
2011-12-16 17:17 1119很多人都通过了D ... -
回顾过去 展望未来(写给自己)
2011-12-15 16:19 1501本来想用“昨天今天明天”做标题来着,但是人家本山大叔说 ... -
SQL注入漏洞
2011-12-15 12:19 721CSDN上的ASP.NET电子杂志下载下来看,就看到了 ... -
关于MapXtreme2004附带Sample不能运行的问题
2011-12-15 10:54 689</span> -
专题地图概述
2011-12-14 12:49 854<p class="MsoNorma ... -
IHS与WAS集成插件静默安装
2011-12-14 12:04 967<span style="col ... -
Java重定向System.out和System.err
2011-12-13 14:49 1178<div>继承PrintStream类: ...
相关推荐
在Android开发中,文件复制和进度条的显示是常见的需求,尤其在移动应用中,用户可能需要将数据从一个位置移动到另一个位置,或者在后台下载文件时展示进度。`ProgressDialog`是Android SDK提供的一种对话框组件,...
在Android开发中,实现多文件下载并展示进度条是一项常见的需求。这涉及到网络编程、线程管理、数据存储以及UI更新等多个方面的知识。下面将详细解释如何在Android中实现这一功能。 1. **网络编程**:Android中进行...
### Android 文件下载进度条的实现 #### 背景与目的 在移动应用开发中,尤其是在Android平台上,文件下载是一项非常常见的功能需求。对于大型文件(如图片、视频等),提供一个进度条来显示下载进度不仅可以提升...
以上就是实现“android下载文件进度条时时更新”的主要技术点。通过这个项目,初学者可以深入理解Android的异步处理、文件I/O以及UI更新等核心概念。实践中,还可以进一步学习如何优化下载速度、处理多文件下载和...
1. AJAX异步下载:通过JavaScript的XMLHttpRequest对象,实现文件的分块下载,每次下载一部分并更新进度条,直到整个文件下载完毕。 2. HTML5 Blob和File API:利用这些API,开发者可以在浏览器端处理大文件,同时...
本篇将详细讲解如何在Android中实现圆形、矩形以及下载进度条,这些实现方法简单易懂,且具有较强的可扩展性。 首先,我们来看圆形进度条的实现。Android SDK提供了`ProgressBar`类,通过设置`android:...
在Android开发中,文件...总结一下,Android文件下载及进度条的实现涉及到网络请求、多线程、UI更新和异常处理等多个方面。理解并掌握这个过程对于Android开发者来说非常重要,因为这直接影响到应用的性能和用户体验。
总的来说,"android 文件上传含进度条"这个话题涵盖的知识点包括Android文件操作、网络编程、异步任务处理、UI更新机制以及可能的通知栏管理。理解并掌握这些,对于Android开发者来说至关重要,尤其是在优化用户体验...
这个压缩包"安卓进度条loadingprogress相关-Android多文件下载进度条.rar"似乎包含了一些资源和代码示例,帮助开发者实现多文件下载时的进度条显示。下面将详细探讨Android中如何实现这样的功能。 首先,`JavaApk...
下面将详细讲解如何在Android中实现一个下载进度条案例。 首先,我们需要在布局文件(如`activity_main.xml`)中设计进度条组件。Android提供了多种类型的进度条,如HorizontalProgressBar和CircularProgressBar。...
本篇文章将详细讲解如何利用`Service` 实现带有进度条的文件下载功能。 首先,我们需要创建一个`Service`,继承自`IntentService`或`Service`。`IntentService`更适合执行一次性任务,它会自动在线程中处理任务,并...
在Android开发中,实现文件下载并展示进度条是一项常见的需求。这个"android下载文件小例子,带进度条显示"的项目就是一个很好的学习素材,它涵盖了以下几个关键知识点: 1. **HTTP下载**:在这个示例中,开发者...
在Android开发中,进度条(ProgressBar)是一种常见的UI组件,用于显示某个操作的进度或等待状态。本教程将深入探讨如何实现一个具有特殊特性的长形进度条,它基于两个动态值并会在达到100%时自动消失。我们将通过...
本文将深入探讨如何实现一个上下滚动的电池电量进度条,并根据电量百分比进行动态更新。 首先,我们需要了解Android中的进度条(ProgressBar)组件。Android SDK 提供了多种类型的进度条,包括Horizontal...
下面将详细介绍如何实现一个“android圆角矩形进度条”。 首先,我们要明白Android中的进度条(ProgressBar)通常是线性的或圆形的,默认样式可能无法满足所有设计需求。为了创建圆角矩形进度条,我们需要自定义一...
【Android点击下载时Button背景变化下载进度条Demo】是一个Android开发中的示例项目,它展示了如何在用户触发下载操作时,使Button的背景发生变化,并同时显示一个下载进度条。这个Demo对于开发者来说,是一个很好的...
下面将详细讲解如何利用给定的代码实现Android文件下载进度条。 首先,我们需要理解布局文件`main.xml`。在这个布局文件中,有两个主要组件:一个`TextView`用于显示百分比进度,以及一个`ProgressBar`用于视觉化...
在Android应用开发中,文件下载和进度条显示是常见的需求,特别是在处理大文件时,进度条可以提供良好的用户体验。在提供的代码中,我们看到一个名为`AndroidDownLoadActivity`的类,它继承自`Activity`,实现了文件...
通过以上步骤,你就可以在Android应用中实现一个具有加载进度条的WebView了。这个功能对于提升用户体验至关重要,因为它让用户知道应用正在忙碌并给予加载过程的视觉反馈,降低了用户对等待时间的感知。同时,合理的...