[英]Android backup and restore database to and from SD-card
我目前正在尋找在我的Android應用程序中構建備份功能。 然而,在開始實施它之前,我有點掙扎,因為我不確定正確的方法是什么。
我在網上發現了一些有趣的文章,所以我提出了三種可能的解決方案:
現在我想知道你們對這三種解決方案的想法,或者你知道另一種解決方案(也許是一種更好的方法)以及你眼中最好的方法是什么?
以下是我對可能的實現的評論:
我期待在這個問題上看到一些意見!
提前致謝!
KR,
短劍
您無需使用root電話從SD卡上的文件還原數據庫。 每個應用程序都可以寫入自己的私有目錄,因此您只需復制該文件即可。 至於2,你有沒有具體的數字? 處理XML是相當快的,因為它是備份/恢復,它不會經常發生,用戶會期望它需要一些時間,所以它不應該是一個問題。 像往常一樣,在做出任何決定之前,測量實際花費的時間並考慮您擁有的數據量。
我總是使用1.)。 這是我的一類,它將DB備份到SD卡。 我在這里使用來自Apache commons-io的FileUtils,你需要改變它,如果你不使用那個jar。 此外,SQLiteOpenHelper類(此處為MySQLiteOpenHelper.getDatabaseName())中需要一個返回數據庫文件名稱的方法。
你將在你的一個活動中從AsyncTask中調用它...
public class MyDatabaseTools {
private String appName = "";
private String packageName = "";
public boolean backup() {
boolean rc = false;
boolean writeable = isSDCardWriteable();
if (writeable) {
File file = new File(Environment.getDataDirectory() + "/data/" + packageName + "/databases/" + MySQLiteOpenHelper.getDatabaseName());
File fileBackupDir = new File(Environment.getExternalStorageDirectory(), appName + "/backup");
if (!fileBackupDir.exists()) {
fileBackupDir.mkdirs();
}
if (file.exists()) {
File fileBackup = new File(fileBackupDir, MySQLiteOpenHelper.getDatabaseName());
try {
fileBackup.createNewFile();
FileUtils.copyFile(file, fileBackup);
rc = true;
} catch (IOException ioException) {
//
} catch (Exception exception) {
//
}
}
}
return rc;
}
private boolean isSDCardWriteable() {
boolean rc = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
rc = true;
}
return rc;
}
public MyDatabaseTools(final Context context, final String appName) {
this.appName = appName;
packageName = context.getPackageName();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.