ActiveAndroid - 未创建任何字段

时间:2013-02-23 17:59:14

标签: android-sqlite activeandroid

我只是尝试使用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 。我还应该做些什么来创建其他字段?

3 个答案:

答案 0 :(得分:10)

嗯,我相信,应该重要的是在他们的教程中分享ActiveAndroid在第一次运行时创建数据库结构。如果更改模型,则不会同步模型。 解决方案:删除手机/模拟器中的db文件,在下次运行时,它可以正常工作。

答案 1 :(得分:8)

还有另一种解决方案:更改 AA_DB_VERSION 元数据值并将修改脚本放置到 assets / migrations 文件夹中,以便ActiveAndroid使用升级功能。当数据库中已存在数据时,它会很方便。

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

答案 2 :(得分:1)

可能是您在创建数据库后对类进行了更改,因此activeandroid无法识别表列。您可以卸载apk,也可以清除应用程序的缓存数据。