Используя советы как Ованесяна, так и Дамиана (напомните мне, чтобы я ответил вам +1, как только я достигну 15;), я нашел следующее решение:
- Для относительно небольших баз данных (<1,5Mb) </li>
Я создал базу данных с помощью браузера баз данных SQLite и поместил ее в папку «Активы».
Затем следующий код копирует базу данных на устройство, если ее там еще нет:
boolean initialiseDatabase = (new File(DB_DESTINATION)).exists();
public void copyDB () выбрасывает IOException {
final String DB_DESTINATION = "/data/data/happyworx.nl.Flitswoorden/databases/WoordData.db";
// Check if the database exists before copying
Log.d("Database exist", "" + initialiseDatabase);
Log.d("Base Context", "" + getBaseContext());
if (initialiseDatabase == false) {
// Open the .db file in your assets directory
InputStream is = getBaseContext().getAssets().open("WoordData.db");
// Copy the database into the destination
OutputStream os = new FileOutputStream(DB_DESTINATION);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0){
os.write(buffer, 0, length);
}
os.flush();
os.close();
is.close();
}}
В моем приложении часть базы данных настраивается пользователем.
Я вызываю код выше в onStart () с:
try {
copyDB();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Итак, когда пользователь нажимает «сбросить базу данных до стандартной» (на экране настроек), я просто устанавливаю логическое значение initialiseDatabase
на «ложь» и жду, когда пользователь вернется к основному действию. (таким образом вызывая onstart и копируя исходную базу данных).
Я пытался вызвать Activity.copyDB () из предпочтений. Java. Это аккуратнее, потому что не требуется, чтобы пользователь возвращался к основному действию для восстановления базы данных. Тем не менее, я получаю сообщение об ошибке из-за невозможности вызова статических ссылок на нестатические методы. Я не понимаю этого, но посмотрю на это.