Проблема с курсором в ActiveAndroid

Я использую ActiveAndroid, и все работало нормально, пока я не добавил еще один ForeignKey в одну модель.

У меня есть модель под названием Song, которая выглядит так:

@Column(name = "author_id")
private String mAuthorId;

@Column(name = "created")
private long mCreated;

@Column(name = "album")
private Album mAlbum;

И еще одна модель Автора, которая:

@Column(name = "author_id")
private String mAuthorId;

@Column(name = "created")
private long mCreated;

private List<Album> mAlbums;

private List<Song> mSongs;

Все работало нормально, но затем я добавил это новое поле в модель автора: @Column(name = "last_song") private Song mLastSong;

Затем, поскольку я добавил FK lastSong в модель автора, после перезапуска приложения я получаю сообщение об ошибке: E/CursorWindow﹕ Не удалось выделить CursorWindow '/data/data/package/databases/app.db' размера 2097152 из-за к ошибке -12. У меня около 7500 моделей песен и около 450 авторов. Что может происходить? Что-то не так с моим кодом?

Заранее спасибо!


person FVod    schedule 10.11.2015    source источник


Ответы (1)


Вам нужно сообщить ActiveAndroid и вашему приложению, что вы обновили схему:

https://github.com/pardom/ActiveAndroid/wiki/Schema-migrations

Всякий раз, когда ваша схема изменяется, вам необходимо увеличивать номер версии базы данных либо через конфигурацию, либо через метаданные AA_DB_VERSION. Если добавляются новые классы, ActiveAndroid автоматически добавит их в базу данных. Однако, если вы хотите что-то изменить в существующей таблице (например, добавить или удалить столбец), это делается с помощью sql-скриптов с именем .sql, где NewVersion — это AA_DB_VERSION, в активах/миграциях.

ActiveAndroid выполнит сценарий, если его имя файла больше, чем старая версия базы данных, и меньше или равно новой версии.

Предположим, вы добавили цвет столбца в таблицу Items. Теперь вам нужно увеличить AA_DB_VERSION до 2 и предоставить скрипт 2.sql.

ALTER TABLE Items ADD COLUMN color INTEGER;

person Kaloyan Roussev    schedule 10.11.2015
comment
Привет, спасибо за ваш ответ. Я удалил приложение и снова установил его, чтобы избежать проблем с миграцией. Приложение открывается нормально, и весь набор данных сохраняется в базе данных (около 7500 песен и 450 авторов) без каких-либо ошибок, но в следующий раз, когда я открываю приложение, запускается ошибка, поэтому приложение открывается примерно через 2 или 3 минуты. Что может происходить? Это ошибка нехватки памяти? - person FVod; 10.11.2015
comment
Прежде всего, вы можете позволить себе удаление и установку поверх промежуточных изменений схемы, только если вы еще не выпустили версию для пользователей. Если уже есть версия, выпущенная для реальных пользователей, и вы меняете схему постфактум, вам необходимо предоставить механизм обратной совместимости, и вы не можете обойтись без чистой установки, потому что вы не можете заставить пользователей сделать это. Запомни. Что касается задержки в 2-3 минуты, то это может быть что угодно, и это не входит в рамки этого вопроса. Вставьте вызовы журнала в методы своей деятельности или отладьте код и посмотрите, где находится узкое место. - person Kaloyan Roussev; 10.11.2015
comment
Привет, вы совершенно правы, я еще не выпустил ни одной версии, поэтому я удаляю приложение, чтобы избежать проблем с миграцией. Пока приложение открывается (2/3 минуты), журнал показывает, что E/CursorWindow﹕ Не удалось выделить CursorWindow '/data/data/package/databases/app.db' размером 2097152 из-за ошибки -12 много раз, и без этого нового внешнего ключа приложение открывается очень быстро, не показывая этого сообщения об ошибке. - person FVod; 10.11.2015