我只是尝试使用ActiveAndroid。按照here的教程,我设置了一切。 我添加了清单条目:
应用程序android:name =“com.activeandroid.app.Application”......
meta-data android:name="AA_DB_NAME" android:value="MyDb.db" meta-data android:name="AA_DB_VERSION" android:value="1"
并创建了我的模型类:
package com.mycomp.Model;
import org.joda.time.LocalDate;
import org.odata4j.core.Guid;
import com.activeandroid.Model;
import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;
@Table(name = "Table1")
public class Table1 extends Model
{
@Column(name = "Custom_ID")
public Guid Custom_ID;
@Column(name = "Name")
public String Name;
@Column(name = "Usr_type")
public int Usr_type;
@Column(name = "BDate")
public LocalDate BDate;
public MyEnum UserGroup;
public Table1()
{
super();
}
public Table1(String name, LocalDate date, Guid custom_id,
MyEnum userGroup)
{
super();
Name = name;
BDate = date;
Custom_ID = custom_id;
UserGroup = userGroup;
}
}
之后,我使用了save方法(据称它创建了底层数据库结构):
Table1 t1=new Table1();
t1.Name="Test";
t1.UserGroup = MyEnum.G1;
t1.save();
它引发了一个例外: 表Table1没有名为Name
的列我用SQLite浏览器检查了它。该表存在但只包含一个字段: Id 。我还应该做些什么来创建其他字段?
答案 0 :(得分:10)
嗯,我相信,应该重要的是在他们的教程中分享ActiveAndroid在第一次运行时创建数据库结构。如果更改模型,则不会同步模型。 解决方案:删除手机/模拟器中的db文件,在下次运行时,它可以正常工作。
答案 1 :(得分:8)
还有另一种解决方案:更改 AA_DB_VERSION 元数据值并将修改脚本放置到 assets / migrations 文件夹中,以便ActiveAndroid使用升级功能。当数据库中已存在数据时,它会很方便。
来源:https://github.com/pardom/ActiveAndroid/wiki/Schema-migrations
答案 2 :(得分:1)
可能是您在创建数据库后对类进行了更改,因此activeandroid无法识别表列。您可以卸载apk,也可以清除应用程序的缓存数据。