由於項目需要一個下載管理模塊,最近一直研究文件下載的實現,經過不斷的努力終於搞定瞭!文件下載管理中我們要對文件的信息進行保存,包括文件的大小,文件名,類型等。這時我們就要用到數據庫瞭,android系統為我們提供瞭輕量級的數據庫SQLite。對於SQLite的使用我們可以參考mars的相關視頻!下面是我在項目中的實例,供大傢參考。
首先定義一個DBHelper繼承SQLiteOpenHelper:
[java]
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
*/
@Override
public 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)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
然後定義一個DBHelperUtil實現一些常見對數據庫的操作功能:
[java]
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;
}
}
/**
* 獲取數據庫中的數據數www.aiwalls.com
*/
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 });
}
}
通過對數據庫的操作我們就可以保存文件當前的相關信息,進而實現我們對文件下載的管理功能。
有問題請留言,大傢一起交流學習!
摘自 Cloay的專欄