Я следовал многим онлайн-учебникам о том, как добиться копирования файла БД из папки «assets» в apk в папку «/ data / data // database» приложения.С моим кодом он завершается неудачно при первом его открытии и копировании базы данных.
Как и в учебниках, создается пустая база данных, в которую копируется моя база данных, но, похоже, она не работает длямне.Код точно такой же, как и везде.Но здесь все равно с соответствующими журналами.
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
SQLiteDatabase db_Read = null;
if(dbExist){
//do nothing - database already exist
Log.v("DBHandler", "Database does exist");
}else{
//By calling this method and empty database will be created into the default system path
//of your application so we are gonna be able to overwrite that database with our database.
Log.v("DBHandler", "Database does not exist");
db_Read = this.getReadableDatabase();
db_Read.close();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("error copying database"); //Error gets thrown here
}
}
}
private void copyDataBase() throws IOException{
//Open your local db as the input stream
InputStream myInput = myContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outFileName = DB_PATH + DB_NAME;
//Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
//transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
//Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
Я получаю следующую ошибку в журнале:
08-01 14:34:25.046: ERROR/Database(27530): sqlite3_open_v2("/data/data/com.package/databases/DB.sqlite", &handle, 1, NULL) failed
Я почти уверен, что ошибка в копировании базы данныхнад.если потребуется какая-либо дополнительная информация, я с радостью предоставлю ее.
РЕДАКТИРОВАТЬ: Я уверен, что ошибка при копировании базы данных, все каталоги пути верны.Я думаю, что это как-то связано со строкой: InputStream myInput = myContext.getAssets().open(DB_NAME);
, может быть, контекст прошел неправильно, но я не понимаю, как.