После резервного копирования базы данных я не могу восстановить выбранную базу данных - PullRequest
0 голосов
/ 11 мая 2018

У меня проблемы с получением файла .db с карты БД.

Я использовал этот код для резервного копирования базы данных:

private void DBBackup() {

    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();


        if (sd.canWrite()) {
            String currentDBPath = getContext().getDatabasePath(DBHelper.DB_NAME).getPath();
            String backupDBPath = "DBBackupTest";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
                Toast.makeText(getContext(), "Export Successful!", Toast.LENGTH_SHORT).show();
            }
        }
    } catch (Throwable e) {
        e.printStackTrace();
    }
}

через несколько минут я хочу импортировать резервную копию базы данных. Это код для импорта

  try {
                File sd = Environment.getExternalStorageDirectory();
                File data = Environment.getDataDirectory();
                if (sd.canWrite()) {
                    String currentDBPath = "/storage/emulated/legacy/DBBackup";
                    String backupDBPath = "DBBackupTest"; // From SD directory.
                    File backupDB = new File(currentDBPath);
                    File currentDB = new File(sd, backupDBPath);


                    FileChannel src = new FileInputStream(backupDB).getChannel();
                    FileChannel dst = new FileOutputStream(currentDB).getChannel();
                    dst.transferFrom(src, 0, src.size());
                    src.close();
                    dst.close();
                    Toast.makeText(getContext(), "Import Successful!", Toast.LENGTH_SHORT).show();

                }
            } catch (Throwable e) {
                Toast.makeText(getContext(), "Import Failed!", Toast.LENGTH_SHORT).show();
                e.printStackTrace();

            }

Шоу Toast "Импорт успешно завершен!" но когда я проверяю базу данных, используя stetho. база данных не прикреплена. Мне нужна твоя помощь в этом. спасибо!

1 Ответ

0 голосов
/ 12 мая 2018

Я исправил проблему, изменив currentDB и изменив его с:

 File currentDB = new File(sd, backupDBPath);

на:

 File currentDB = new File(getContext().getDatabasePath(DBHelper.DB_NAME).getPath());
...