Я не знаю, является ли это все еще полезным, но вот решение для других, которые добираются сюда, чтобы увидеть awnser.Код, который вы использовали, работает для большинства телефонов, некоторые старые телефоны ведут себя по-разному с помощью функции getReadableDatabase ().Поэтому ваша проблема не в функции copyDataBase, а в функции createDataBase.
в createDataBase () есть следующая проверка:
this.getReadableDatabase();
Эта проверка проверяет, существует ли уже база данных спредоставленное имя и, если нет, создает пустую базу данных, так что она может быть перезаписана с той, что в папке ресурсов.На более новых устройствах это работает безупречно, но есть некоторые устройства, на которых это не работает.В основном старые устройства.Я не знаю точно, почему, но похоже, что функция getReadableDatabase () не только получает базу данных, но и открывает ее.Если вы затем скопируете базу данных из папки ресурсов поверх нее, у нее все еще есть указатель на пустую базу данных, и вы получите таблицу несуществующих ошибок.
Таким образом, чтобы заставить его работать на всех устройствах, вы должны изменить его на следующие строки:
SQLiteDatabase db = this.getReadableDatabase();
if (db.isOpen()){
db.close();
}
Даже если база данных открыта в чеке, она после этого закрывается, и онабольше не доставит вам хлопот.