由於項目需要一個下載管理模組,最近一直研究檔案下載的實現,經過不斷的努力終於搞定了!檔案下載管理中我們要對檔案的資訊進行儲存,包括檔案的大小,檔案名稱,類型等。這時我們就要用到資料庫了,android系統為我們提供了輕量級的資料庫SQLite。對於SQLite的使用我們可以參考mars的相關視頻!下面是我在項目中的執行個體,供大家參考。
首先定義一個DBHelper繼承SQLiteOpenHelper:
package com.cloay.down.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * 儲存下載檔案資訊的DBHelper * DBHelper.java * @author cloay * 2011-11-18 */public class DBHelper extends SQLiteOpenHelper {// download.db-->資料庫名public DBHelper(Context context) {super(context, "download.db", null, 1);}/** * 在download.db資料庫下建立一個download_info表格儲存體下載資訊 * state 定義四種下載的狀態:初始化狀態1,正在下載狀態2,暫停狀態3,下載完成4 */@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table download_info(_id integer PRIMARY KEY AUTOINCREMENT, url char, "+ "file_size integer, compelete_size integer, state integer)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}
然後定義一個DBHelperUtil實現一些常見對資料庫的操作功能:
package com.cloay.down.utils;import java.util.ArrayList;import java.util.List;import com.cloay.down.db.DBHelper;import com.cloay.down.entity.FileInfo;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;/** * 資料庫工具類,實現資料庫的尋找,刪除,更新等功能 * DBHelperUtil.java * @author cloay * 2011-11-18 */public class DBHelperUtil {private DBHelper dbHelper; public DBHelperUtil(Context context) { dbHelper = new DBHelper(context); } /** * 查看資料庫中是否有資料 * @param urlstr * 下載連結 * @return */ public boolean isHasInfors(String urlstr) { SQLiteDatabase database = dbHelper.getReadableDatabase(); String sql = "select count(*) from download_info where url=?"; Cursor cursor = database.rawQuery(sql, new String[] { urlstr }); cursor.moveToFirst(); int count = cursor.getInt(0); cursor.close(); closeDb(); if(count == 0){ return true; } else{ return false; } } /** * 擷取資料庫中的資料數 */ public int getLoadInfoCount(){ int i = 0; SQLiteDatabase database = dbHelper.getReadableDatabase(); String sql = "select count(*) from download_info"; Cursor cursor = database.rawQuery(sql, new String[] {}); while(cursor.moveToNext()){ i++; } closeDb();return i; } /** * 查詢資料庫中所有資料 */ public List<FileInfo> getLoadInfos (){ List<FileInfo> fileInfos = new ArrayList<FileInfo>(); SQLiteDatabase database = dbHelper.getReadableDatabase(); String sql = "select url,file_size,compelete_size,state from download_info"; Cursor cursor = database.rawQuery(sql, new String[] {}); while (cursor.moveToNext()) { FileInfo info = new FileInfo(cursor.getString(0), cursor.getInt(1), cursor.getInt(2), cursor.getInt(3)); fileInfos.add(info); } cursor.close(); closeDb(); return fileInfos; } /** * 儲存 下載的具體資訊 * @param info * 下載檔案資訊 */ public void saveInfos(FileInfo info) { SQLiteDatabase database = dbHelper.getWritableDatabase(); String sql = "insert into download_info(file_size, compelete_size, url, state) values (?,?,?,?)"; Object[] bindArgs = {info.getFileSize(), info.getCompleteSize(), info.getUrlstring(), info.getState()}; database.execSQL(sql, bindArgs); } /** * 得到下載具體資訊 * @param urlstr * 下載連結url * @return */ public FileInfo getInfo(String urlstr) { FileInfo info = null; SQLiteDatabase database = dbHelper.getReadableDatabase(); String sql = "select file_size,compelete_size,url,state from download_info where url=?"; Cursor cursor = database.rawQuery(sql, new String[] { urlstr }); while (cursor.moveToNext()) { info = new FileInfo(cursor.getString(2), cursor.getInt(0), cursor.getInt(1), cursor.getInt(3)); } cursor.close(); closeDb(); return info; } /** * 更新資料庫中的下載資訊 */ public void updataInfos(int compeleteSize, int state, String urlstr) { SQLiteDatabase database = dbHelper.getReadableDatabase(); String sql = "update download_info set compelete_size=?,state=? where url=?"; Object[] bindArgs = { compeleteSize, state, urlstr }; database.execSQL(sql, bindArgs); } /** * 關閉資料庫 */ public void closeDb() { dbHelper.close(); } /** * 下載完成後刪除資料庫中的資料 */ public void delete(String url) { SQLiteDatabase database = dbHelper.getReadableDatabase(); database.delete("download_info", "url=?", new String[] { url }); }}
通過對資料庫的操作我們就可以儲存檔案當前的相關資訊,進而實現我們對檔案下載的管理功能。
有問題請留言,大家一起交流學習!
說明:轉載請註明出處!