Android开发之ProgressDialog读取文件进度解析

2016-01-23 14:36 阅读 5,215 次 评论 0 条
版权声明:本文著作权归TeachCourse所有,未经许可禁止转载,谢谢支持!
转载请注明出处:http://teachcourse.cn/1315.html

概要

进度条以一种客观化的方式,让我们知道程序正在执行的情况,在程序需要时间执行任务的时候,提示进度条友好的告诉用户说,当前任务还没有完成,请稍稍等待,进度条经常使用在APP下载应用、更新应用、加载网络数据中,使用频繁,常见的进度条有ProgressDialogProgressBar,上一篇《Android之ProgressBar读取文件进度解析》介绍了ProgressBar,这里只要介绍ProgressDialog,实现效果图:

demo-ProgressDialog

知识点总结

ProgressDialog读取文件进度解析主要涉及到一个知识:1、Handler消息处理机制2、文件字节流的操作3、ProgressDialog类的使用

Handler消息处理机制

Handler消息处理机制,接收子线程传递过来的消息,根据消息传递值,执行UI界面更新操作,目的防止阻塞主线程,使用最多的是sendEmptyMessage(int)、sendMessage(int),因为经常需要只要,所以记住第一个Handler代码的写法,后面没次都可以复制过来用,如下:

  1. Handler handler = new Handler() {  
  2.   
  3.         @Override  
  4.         public void handleMessage(Message msg) {  
  5.             switch (msg.what) {  
  6.             case 110://根据what值,执行UI更新操作  
  7.                 progressValue += msg.arg1;  
  8.                 sb.append(msg.obj);  
  9.                 mTextView.setText(sb.toString());//TextView显示读取内容  
  10.                 mDialog.setProgress(progressValue);//设置进度条当前值  
  11.                 if (progressValue == 100) {//判读是否读取结束  
  12.                       
  13.                     mDialog.dismiss();  
  14.                     Toast.makeText(MainActivity.this"读取完成!", Toast.LENGTH_SHORT).show();  
  15.                 }  
  16.                   
  17.                 break;  
  18.   
  19.             }  
  20.         }  
  21.   
  22.     };  

文件字节流的操作

输入输出流的内容,看来也不是想象中的那么难,在《Java面向对象程序设计》一书中分为:File类、文件字节流、文件字符流、缓冲流、文件对话框、随机流、数组流、数据流带进度条的输入流、对象流,经常会忘记它们对应的类,使用起来容易混乱,下面分别写一个简单例子:

File类

  1. File path = Environment.getExternalStorageDirectory();//获取sdcard根路径  
  2. File file = new File(path + "/ProgressMonitor.txt");//读取根路径下的ProgressMonitor文件  

文件字节流

  1. private void readFromFile(String path) {  
  2.         FileInputStream fis;  
  3.         DataInputStream dis;  
  4.         try {  
  5.             fis = new FileInputStream(path);  
  6.             dis = new DataInputStream(fis);  
  7.             byte b[] = new byte[10];// 每次读取10字节  
  8.             while ((readed = dis.read(b)) != -1) {  
  9.                 Message msg = new Message();  
  10.                 String str=new String(b,0,readed);  
  11.                 msg.obj=str;  
  12.                 msg.arg1 = readed;  
  13.                 msg.what = 110;  
  14.                 handler.sendMessage(msg);  
  15.                 try {  
  16.                     Thread.sleep(1000);  
  17.                 } catch (Exception e) {  
  18.   
  19.                     e.printStackTrace();  
  20.                 }  
  21.   
  22.             }  
  23.   
  24.         } catch (FileNotFoundException e) {  
  25.   
  26.             e.printStackTrace();  
  27.         } catch (IOException e) {  
  28.             e.printStackTrace();  
  29.         }finally {  
  30.             try {  
  31.                 dis.close();  
  32.                 fis.close();  
  33.             } catch (IOException e) {  
  34.                 // TODO Auto-generated catch block  
  35.                 e.printStackTrace();  
  36.             }  
  37.         }  
  38.   
  39.     }  

文件字符流
详解参考《文件字符流使用说明》

缓冲流
详解参考《缓冲流使用说明》

文件对话框
详解参考《文件对话框使用说明》

随机流
详解参考《随机流使用说明》

数组流
详解参考《数组流使用说明》

数据流带进度条的输入流
详解参考《数据流带进度条的输入流使用说明》

对象流
详解参考《对象流使用说明》

ProgressDialog的使用

ProgressDialog继承AlertDialog,AlertDialog继承Dialog,常用的属性有:

  1. mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);/进度条样式  
  2. mDialog.setMax(100);//进度条最大值  
  3. mDialog.setTitle("系统提示");//进度条标题  
  4. mDialog.setIcon(R.drawable.ic_launcher);//进度条图标  
  5. mDialog.setMessage("正在读取文件,请稍等。。。");//进度条提示信息  
  6.   
  7. mDialog.setProgress(progressValue);//进度条当前值  
  8. mDialog.dismiss();//进度条消失  

完整代码:

  1. private static final int STYLE_HORIZONTAL = 110;  
  2. private static final int STYLE_SPINNER = 111;  
  3. private void progressDialogStyle(int id) {  
  4.         switch (id) {  
  5.         case STYLE_SPINNER:  
  6.             mDialog = new ProgressDialog(this, ProgressDialog.STYLE_SPINNER);  
  7.             break;  
  8.         case STYLE_HORIZONTAL:  
  9.             mDialog = new ProgressDialog(this);  
  10.             mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
  11.             break;  
  12.   
  13.         default:  
  14.             break;  
  15.         }  
  16.   
  17.         mDialog.setMax(100);  
  18.         mDialog.setTitle("系统提示");  
  19.         mDialog.setIcon(R.drawable.ic_launcher);  
  20.         mDialog.setMessage("正在读取文件,请稍等。。。");  
  21.     }  

总结

ProgressDialog类可以制作平时常见的进度条效果,如果需要更多进度条式样,可以重写ProgressDialog提供的方法或者继承AlertDialog自定义样式

关注公众号 扫一扫二维码,加我QQ

如果文章对你有帮助,欢迎点击上方按钮关注作者

来源:TeachCourse每周一次,深入学习Android教程,关注(QQ1589359239或公众号TeachCourse)
转载请注明出处:http://teachcourse.cn/1315.html

资源分享

源码下载
最新Android Studio 快速入门(开发)指南 最新Android Studio 快速入门(
startService和bindService区别 startService和bindService区别
深入理解静态类(static)和非静态类之间的区别 深入理解静态类(static)和非静态
新手的第一个Android项目该如何选择targetSdkVersion 新手的第一个Android项目该如何

发表评论

呲牙 憨笑 坏笑 偷笑 色 微笑 抓狂 睡觉 酷 流汗 鼓掌 大哭 可怜 疑问 晕 惊讶 得意 尴尬 发怒 奋斗 衰 骷髅 啤酒 吃饭 礼物 强 弱 握手 OK NO 勾引 拳头 差劲 爱你

表情