以下代码按预期工作
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语言?
答案 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;
}