標籤:
該篇說明
現在我們正式進入功能及代碼的分析
主要進行重要功能的講解吧。
拷貝單詞書功能在第一個介面中
也就是在歡迎介面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-拷貝單詞書實現