我目前正在寻找在我的 Android 应用程序中构建备份功能。然而,在开始实施之前我有点挣扎,因为我不确定正确的方法是什么。
我在网上发现了一些有趣的文章,因此我想出了三种可能的解决方案:
- 将整个DB文件备份到SD卡
- 将 DB 数据导出到 SD 卡上的 XML 文件
- 使用Android备份机制将整个DB备份到Google云
现在我想知道你们对这 3 种解决方案有何看法,或者你们知道另一种(也许是更好的方法)以及您认为最好的方法是什么?
以下是我对可能的实施的评论:
- 我不知道手机是否没有root,是否可以恢复数据库文件...否则我认为这真的没有任何缺点...
- 在 Android 手机上动态处理 XML 文件非常繁重,因此如果可以避免,最好不要这样做
- 使用 Android 备份机制,备份功能仅在用户在手机上启用时才可用,并且所有数据都应复制到云端...就我而言,在某些情况下可能会很多...
我期待看到有关此问题的一些意见!
提前致谢!
Kr,
Dirk
我总是使用 1.)。这是我的一堂课,它将数据库备份到 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();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)