2015-11-10 3 views
1

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

У меня есть модель под названием 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") частная песня mLastSong;

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

Заранее благодарен!

ответ

0

Вы должны позволить ActiveAndroid и ваше приложение, которое вы обновили схему:

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

Whenever your schema changes you need to increment the database version number, either through Configuration or AA_DB_VERSION meta-data. If new classes are added, ActiveAndroid will automatically add them to the database. If you want to change something in an existing table however (e.g. add or delete a column), this is done using sql-scripts named .sql, where NewVersion is the AA_DB_VERSION, in assets/migrations.

ActiveAndroid will execute a script if its filename is greater than the old database-version and smaller or equal to the new version.

Let’s assume you added a column color to the Items table. You now need to increase AA_DB_VERSION to 2 and provide a script 2.sql.

ALTER TABLE Items ADD COLUMN color INTEGER;

+0

Привет, Спасибо за ваш ответ. Я удалил приложение и установил его снова, чтобы избежать проблем с миграцией. Приложение открывается отлично, и весь набор данных сохраняется в базе данных (около 7500 песен и 450 авторов) без каких-либо ошибок, но в следующий раз, когда я открою приложение, будет запущена ошибка, поэтому для открытия приложения около 2 или 3 минут. Что может случиться? Это ошибка памяти? – FVod

+0

Прежде всего, вы можете позволить удалять и устанавливать между изменениями схемы, только если вы еще не выпустили версию для пользователей. Если уже есть версия, выпущенная для реальных пользователей, и вы измените схему после факта, вам необходимо предоставить механизм обратной совместимости, и вы не сможете избежать чистых установок, потому что вы не можете заставить пользователей это делать. Запомни. Что касается задержки на 2-3 минуты, может быть что угодно, и это не входит в сферу этого вопроса. Вставьте логические вызовы в методы своих действий или отлаживайте код и посмотрите, где это узкое место. –

+0

Привет, вы совершенно правы, я еще не выпустил какую-либо версию, поэтому я удаляю приложение, чтобы избежать проблем с миграцией. Пока приложение открывается (2/3 минуты), журнал показывает E/CursorWindow: не удалось выделить CursorWindow '/data/data/package/databases/app.db' размером 2097152 из-за ошибки -12 много раз, и без этого нового внешнего ключа приложение открыто очень быстро, не показывая это сообщение об ошибке. – FVod

Смежные вопросы