安卓开发数据库备份和还原实例

2014-06-06
浏览
导读:新建一个类继承 AsyncTask public class BackupTask extends AsyncTaskString, Void, Integer { private static final String COMMAND_BACKUP = backupDatabase ; public static final String COMMAND_RESTORE = restroeDatabase ; private Context mContext;

  新建一个类继承 AsyncTask

  public class BackupTask extends AsyncTask<String, Void, Integer> {

  private static final String COMMAND_BACKUP = "backupDatabase";

  public static final String COMMAND_RESTORE = "restroeDatabase";

  private Context mContext;

  public BackupTask(Context context) {

  this.mContext = context;

  }

  @Override

  protected Integer doInBackground(String... params) {

  // TODO Auto-generated method stub

  // 获得正在使用的数据库路径,我的是 sdcard 目录下的 /dlion/db_dlion.db

  // 默认路径是 /data/data/(包名)/databases/*.db

  File dbFile = mContext.getDatabasePath(Environment

  .getExternalStorageDirectory().getAbsolutePath()

  + "/dlion/db_dlion.db");

  File exportDir = new File(Environment.getExternalStorageDirectory(),

  "dlionBackup");

  if (!exportDir.exists()) {

  exportDir.mkdirs();

  }

  File backup = new File(exportDir, dbFile.getName());

  String command = params[0];

  if (command.equals(COMMAND_BACKUP)) {

  try {

  backup.createNewFile();

  fileCopy(dbFile, backup);

  return Log.d("backup", "ok");

  } catch (Exception e) {

  // TODO: handle exception

  e.printStackTrace();

  return Log.d("backup", "fail");

  }

  } else if (command.equals(COMMAND_RESTORE)) {

  try {

  fileCopy(backup, dbFile);

  return Log.d("restore", "success");

  } catch (Exception e) {

  // TODO: handle exception

  e.printStackTrace();

  return Log.d("restore", "fail");

  }

  } else {

  return null;

  }

  }

  private void fileCopy(File dbFile, File backup) throws IOException {

  // TODO Auto-generated method stub

  FileChannel inChannel = new FileInputStream(dbFile).getChannel();

  FileChannel outChannel = new FileOutputStream(backup).getChannel();

  try {

  inChannel.transferTo(0, inChannel.size(), outChannel);

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  } finally {

  if (inChannel != null) {

  inChannel.close();

  }

  if (outChannel != null) {

  outChannel.close();

  }

  }

  }

  }

  在 mainActivity 里异步加载备份、还原:

  // 数据恢复

  private void dataRecover() {

  // TODO Auto-generated method stub

  new BackupTask(this).execute("restroeDatabase");

  }

  // 数据备份

  private void dataBackup() {

  // TODO Auto-generated method stub

  new BackupTask(this).execute("backupDatabase");

  }

编程实现Android远程控制PC

[Android的系统移植与平台开发]Sensor HAL

[Android的系统移植与平台开发]Sensor HAL

用ViewPager实现高仿图片左右滑动自动切换

详解android Content Provider[6]