gpt4 book ai didi

Android 备份和恢复数据库到 SD 卡

转载 作者:IT王子 更新时间:2023-10-29 06:30:07 26 4
gpt4 key购买 nike

我目前正在寻求在我的 Android 应用程序中构建备份功能。然而,在开始实现之前我有点挣扎,因为我不确定正确的方法是什么。

我在网上找到了一些有趣的文章,所以我想出了三种可能的解决方案:

  1. 将整个DB文件备份到SD卡
  2. 将数据库数据导出到 SD 卡上的 XML 文件
  3. 使用Android备份机制将整个DB备份到Google云端

现在我想知道你们对这 3 种解决方案有何看法,或者您是否知道另一种解决方案(也许是更好的方法)以及您认为最好的方法是什么?

以下是我对可能实现的评论:

  1. 我不知道手机是否没有 root 是否有可能恢复数据库文件...否则我认为这没有任何缺点...
  2. 在 Android 手机上即时处理 XML 文件很繁重,因此如果可以避免,最好不要那样做
  3. 使用 Android 备份机制,备份功能只有在用户在手机上启用时才可用,并且所有数据都应复制到云端...在我的情况下,在某些情况下可能会很多。 ..

我期待看到有关此问题的一些意见!

提前致谢!

德克

最佳答案

我总是使用 1.)。这是我的一个类,它可以将数据库备份到 SD 卡。我在这里使用 Apache commons-io 的 FileUtils,如果你不使用那个 jar,你需要改变它。此外,您的 SQLiteOpenHelper 类(此处为 MySQLiteOpenHelper.getDatabaseName())中需要一个方法来返回您的数据库文件的名称。

您将在您的某个 Activity 中从 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();
}
}

关于Android 备份和恢复数据库到 SD 卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7379187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com