Это сохранить для замены базы данных SQLite - PullRequest
0 голосов
/ 03 мая 2020

Я добавил опцию в своем приложении, где пользователь может сделать резервную копию приложения на Google Drive.


Я получаю ссылку на базу данных, например:

File dbFile = new File(context.getDatabasePath(DATABASE_NAME).getAbsolutePath());

Когда я регистрирую вышеупомянутое, чтобы получить путь, это возвращается - /data/user/0/my.package.name/databases/DatabaseName.DB

Затем я создаю копию своей базы данных и загружаю ее в Google Drive.

Это работает хорошо.


Теперь, на другом устройстве, я загружаю базу данных в каталог моего приложения. После сохранения я перемещаю / заменяю старую базу данных, выполняя следующие действия:

try {
    //The database is stored here from Google Drive
    File directoryFile = context.getExternalFilesDir("BackupDB");
    InputStream mInput = new FileInputStream(directoryFile+"/DatabaseName.DB");
    //Path to current database - /data/user/0/my.package.name/databases/DatabaseName.DB
    String outFileName = context.getDatabasePath(DATABASE_NAME).getAbsolutePath();
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[1024];
    int mLength;
    while ((mLength = mInput.read(mBuffer))>0){
        mOutput.write(mBuffer, 0, mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();

} catch (Exception e) {
    e.printStackTrace();
}

Вышеописанное прекрасно работает на моем устройстве.


Я видел, как некоторые люди говорили что /data/data/ могут быть доступны только для корневых устройств, но я также видел, как многие люди говорят, что мы можем переопределить базу данных нашего приложения.

Мой вопрос:

Безопасно ли для меня обращаться к базе данных приложения и переопределять ее во всех android версиях? Или есть ограничения?

1 Ответ

0 голосов
/ 03 мая 2020

Я не думаю, что есть проблема с этим, поскольку вы обращаетесь к частным каталогам данных вашего приложения, и они удаляются после удаления приложения, проверьте таблицу на этой странице:

Обзор хранилища данных и файлов

С другой стороны, почему бы вам не использовать Cloud Firestore DB вместо создания резервной копии sqlite DB и сохранения ее на диске Google, а затем загрузить et c ..

Просто создайте свою БД на FireBase CoudFirestore и защитите ее с помощью правил, используйте API для загрузки вашей БД в приложение на любом устройстве и сохраните ее локально в Room DB , используйте Room как источник правды для приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...