ActiveAndroid - 未创建任何字段

Nes*_*tor 2 activeandroid android-sqlite

我只是尝试使用ActiveAndroid.从下面的教程在这里,我设置的一切.我添加了清单条目:

应用程序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"
Run Code Online (Sandbox Code Playgroud)

并创建了我的模型类:

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;
  }

}
Run Code Online (Sandbox Code Playgroud)

之后,我使用了save方法(据称它创建了底层数据库结构):

Table1 t1=new Table1();
t1.Name="Test";
t1.UserGroup = MyEnum.G1;
t1.save();
Run Code Online (Sandbox Code Playgroud)

它引发了一个异常: 表Table1没有名为Name的列

我用SQLite Browser检查了它.该表存在,但只包含一个字段:Id.我还应该做些什么来创建其他字段?

Nes*_*tor 10

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

  • 您应该在答案中编辑该教程(https://github.com/pardom/ActiveAndroid/wiki/Getting-started),以便其他人不会遇到同样的问题. (2认同)

Nes*_*tor 8

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

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