标签:
该篇说明
现在我们正式进入功能及代码的分析
主要进行重要功能的讲解吧。
拷贝单词书功能在第一个界面中
也就是在欢迎界面WelcomeActivity中
项目整体构架是MVC模式的
UI中主要只进行调用显示数据
真正的数据处理逻辑在客户端后台。
那么先介绍UI及流程,再描述后台的拷贝单词书功能。
效果如图
执行流程图
流程详细说明
1> 先需要检查单词书
首先需要检查SDcard中是否存在单词书文件,不存在才需要进行拷贝
private void checkWordBookFiles() { boolean result = ResManager.checkWordBookFiles(); if(!result) { Toast.makeText(context, "不存在单词书db文件-准备拷贝", Toast.LENGTH_LONG).show(); //拷贝单词书 installWordBookFiles(); } else { Toast.makeText(context, "存在单词书db文件-准备检查学习计划", Toast.LENGTH_LONG).show();
//检查学习计划 checkStudyPlanFiles(); } }
2> 拷贝单词书方法
需要进度条提示,然后拷贝单词书需要操作SQLite数据库
耗时操作一定要在多线程中进行,否则会卡主UI。
private void installWordBookFiles() { installWordBookFilesProgressDialog.setMessage("正在初始化单词数据"); installWordBookFilesProgressDialog.setMax(WordBookConstant.allWordBookFileByteLength); installWordBookFilesProgressDialog.show(); Thread installWordBookFilesThread = new Thread(new InstallWordBookFilesThread()); installWordBookFilesThread.start(); }
3> 拷贝单词书线程
这里线程类实现Runnable接口的内部类,调用了资源管理的拷贝单词书方法
class InstallWordBookFilesThread implements Runnable { @Override public void run() { ResManager.init(context, installWordBookFilesProgressDialog); ResManager.installWordBookFiles(); myHandler.sendEmptyMessage(0); } }
后台拷贝单词书功能详解
该功能调用于资源管理模块ResManager
1> 拷贝所有文件功能
public static void installWordBookFiles() { try { //创建项目目录 File path = new File(PathConstant.WDBOOK_PATH); if (path.exists() == false) { Log.d("vrbword", "path didn‘t exist, creating!!!"); path.mkdirs(); } //安装文件 installFile(WordBookConstant.DICT_STR + ".smf", PathConstant.WDBOOK_PATH + "/" + WordBookConstant.DICT_STR); installFile(WordBookConstant.CET4_STR, PathConstant.WDBOOK_PATH + "/" + WordBookConstant.CET4_STR); installFile(WordBookConstant.CET6_STR, PathConstant.WDBOOK_PATH + "/" + WordBookConstant.CET6_STR); installFile(WordBookConstant.KAOYAN_STR, PathConstant.WDBOOK_PATH + "/" + WordBookConstant.KAOYAN_STR); installFile(WordBookConstant.TOFEL_STR, PathConstant.WDBOOK_PATH + "/" + WordBookConstant.TOFEL_STR); installFile(WordBookConstant.IELTS_STR, PathConstant.WDBOOK_PATH + "/" + WordBookConstant.IELTS_STR); installFile(WordBookConstant.GRE_STR, PathConstant.WDBOOK_PATH + "/" + WordBookConstant.GRE_STR); } catch (Exception e) { e.printStackTrace(); } }
a> 先要创建项目目录,是从assets目录拷贝到sdcard目录中,你可以自己通过常量类Constant来确定目录的。
b> 目录创建好了,就可以依次拷贝了
这里使用了installFile(from, dest)方法,可拷贝单个文件
2> 拷贝文件功能
拷贝单个文件
就是从assets目录中拷贝指定文件数据到sdcard的指定目录的文件中
private static void installFile(String from, String dest) throws Exception { //判断文件 File fp = new File(dest); if (!fp.exists() || fp.length() < 10 * 1024) { //确定out及in流 InputStream in = context.getAssets().open(from); OutputStream out = new FileOutputStream(fp); //每次读写字节长度 byte[] buf = new byte[operateFileByteLength]; while (-1 != in.read(buf)) { out.write(buf); //休眠可加强进度显示效果 SystemUtil.sleepvd(5); //不断设置进度值 progressValue += operateFileByteLength; myProgressDialog.setProgress(progressValue); } //关闭in及out流 in.close(); out.close(); } }
a> 首先要判断文件大小,文件存在和文件满足大小条件才进行拷贝
b> 然后确定out及in流,根据指定的字节长度依次写入读出的数据到文件中。
c> 这里用到了休眠只是为了显示更好
d> 每次写指定字节的数据,进度值都会增加,显示到自定义的对话框中。
更多请自行下载源码解读
应用下载:请点击
源码下载:请点击
标签:
原文地址:http://www.cnblogs.com/vomzoo/p/5433361.html