码迷,mamicode.com
首页 > 移动开发 > 详细

android项目实战-背呗单词DEV01-拷贝单词书实现

时间:2016-04-26 01:48:44      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:

该篇说明

现在我们正式进入功能及代码的分析

主要进行重要功能的讲解吧。

 

拷贝单词书功能在第一个界面中

也就是在欢迎界面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> 每次写指定字节的数据,进度值都会增加,显示到自定义的对话框中。

 

更多请自行下载源码解读

应用下载:请点击

源码下载:请点击

android项目实战-背呗单词DEV01-拷贝单词书实现

标签:

原文地址:http://www.cnblogs.com/vomzoo/p/5433361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!