ActiveAndroid的游标问题

时间:2015-11-10 08:44:36

标签: android android-sqlite activeandroid android-database

我正在使用ActiveAndroid,一切正常,直到我将另一个ForeignKey添加到一个模型。

我有一个名为Song的模型,如:

namespace Timer
{
    void start(Duration time, function<void()> task)
    {
        thread([time, task]() {
            this_thread::sleep_for(time);
            task();
        }).detach();
    }
}

另一个模特作者是:

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

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

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

一切都运行良好但后来我在作者的模型中添加了这个新字段:     @Column(name =“last_song”)     私人歌曲mLastSong;

然后,由于我在作者的模型中添加了FK lastSong,在重新启动应用程序后我收到一个错误:E / CursorWindow:无法分配CursorWindow'/ data / data /package / database / app.db'尺寸2097152由于错误-12。我有大约7500首歌曲模型和约450位作者。可能会发生什么?我的代码有问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您需要让ActiveAndroid和您的应用更新架构:

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

  

每当架构发生更改时,您需要通过Configuration或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;