我目前正在寻找在我的Android应用程序中构建备份功能。然而,在开始实施它之前,我有点挣扎,因为我不确定正确的方法是什么。
我在网上发现了一些有趣的文章,所以我提出了三种可能的解决方案:
现在我想知道你们对这三种解决方案的看法,或者你们知道另一种解决方案(也许是更好的方法),你眼中的最佳方式是什么?
以下是我对可能的实施的评论:
我期待在这个问题上看到一些意见!
提前致谢!
氪,
德克
答案 0 :(得分:0)
您无需使用root电话即可从SD卡上的文件还原数据库。每个应用程序都可以写入自己的私有目录,因此您只需复制该文件即可。至于2,你有没有具体的数字?处理XML是相当快的,因为它是备份/恢复,它不会经常发生,用户会期望它需要一些时间,所以它不应该是一个问题。像往常一样,在做出任何决定之前,测量实际花费的时间并考虑您拥有的数据量。
答案 1 :(得分:0)
我总是使用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();
}
}