标签:
该篇说明
现在我们正式进入功能及代码的分析
主要进行重要功能的讲解吧。
拷贝单词书功能在第一个界面中
也就是在欢迎界面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