为什么DbFlow无法在未分配给变量的情况下保存对象?

时间:2015-08-30 22:22:44

标签: android sqlite android-sqlite

以下代码按预期工作

Customer x = new Customer();
x.name = "yasin";
x.save();

但这导致应用程序崩溃

new Customer() {
  {
     name = "yasin";
  }
}.save();

logcat中的错误详细信息:

com.raizlabs.android.dbflow.structure.InvalidDBConfiguration: 
Table: com.example.yasin.myapplication.MainActivityFragment$1$1 is not
registered with a Database. Did you forget the @Table annotation?

为什么会这样?它是DbFlow的一些错误还是我不了解Java语言?

2 个答案:

答案 0 :(得分:3)

您得到的错误是因为在第二种情况下,您使用匿名类扩展Customer类,而DBFlow要求它管理的类需要注释,创建的匿名类不是这种情况。这就是导致错误的原因。 解决方案是添加一个带有name参数的构造函数,这样你就可以执行以下操作:new Customer(" name")。save();

答案 1 :(得分:1)

在您的Customer类中,您是否使用@Table注释来声明表所在的数据库名称?根据DBFlow教程,数据库名称位于您的一个DB相关类中,在下面的示例中,一个名为AppDatabase。 (迁移需要版本)

@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)
public class AppDatabase {

    public static final String NAME = "MyDataBaseName";
    public static final int VERSION = 4;
}

将您的实体类与此示例进行比较

@Table(databaseName = AppDatabase.NAME)
public class TestModel extends BaseModel {

    // All tables must have a least one primary key
    @Column
    @PrimaryKey
    String name;

    // By default the column name is the field name
    @Column
    int randomNumber;
}

取自DBFlow Usage Readme on GitHub