到目前为止我发现了什么
在编译期间处理所有@entity带注释的类,并生成Implementation for Database类.然后在访问db之前,调用此生成的类的validateMigration方法.此validateMigration方法通过原始查询使用现有的db模式进行验证
PRAGMA table_info mytable name
(参见android.arch.persistence.room.util.TableInfo.java的L208)
现在问题
我的sqlite3 db有一些列类型为BOOLEAN的列.(slqite内部处理int).现在,当我创建房间实体说
public someEntity {
@columnInfo(name="someName")
public Boolean myValue;
}
Run Code Online (Sandbox Code Playgroud)
房间的创建表查询将是
Create Table someEntity ( myValue INTEGER)
凡当我们查询现有的数据库与PRAGMA table_info someEntity我们得到
1|myValue|BOOLEAN|0||0
如上所述,room通过比较字段名称,列类型等来验证(sqlite到room)迁移.由于列类型不匹配(BOOLEAN和INTEGER),它会抛出错误,表示迁移失败.
任何人都可以建议一个解决方法吗?我们可以在sqlite中创建空间创建BOOLEAN列类型吗?(另外,我们无法更改/更改现有表的列类型.)
PS:我也看到了与VARCHAR类似的问题 - 在Room中使用现有的VARCHAR列
按照Google IO 教程,我开始将我的应用程序转换为支持即时功能。我让构建正确运行。我已经禁用,因为我遇到了构建错误。禁用这两个模块后,模块构建没有错误,但是当我去编辑应用程序的基本功能的配置时,我得到aapt2enableNewResourceProcessingflagsThe module cannot be android library。
有谁知道是什么导致了这个问题。我com.android.feature plugin在功能模块的构建中与构建风格和构建类型一起使用。