2

我只是尝试使用 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"

并创建了我的模型类:

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。我还应该做什么来创建其他字段?

4

3 回答 3

10

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

于 2013-02-24T05:55:55.397 回答
8

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

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

于 2013-06-27T13:24:32.420 回答
1

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

于 2014-02-17T17:36:39.933 回答