2015-08-30 71 views
0

代碼按預期工作爲什麼DbFlow無法保存對象而不被分配給變量?下面

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

您得到的錯誤是因爲在第二種情況下,您使用匿名類擴展Customer類並且DBFlow要求它管理的類需要註釋,但創建匿名類並非如此。那是導致錯誤的原因。 該解決方案將添加一個構造函數採用名稱參數,所以你可以做一些事情:new Customer(「the name」)。save();

1

在您的Customer類中,您是否已將@Table註釋聲明爲表所在的數據庫名稱?根據DBFlow教程,數據庫名稱位於您的數據庫相關類之一中,在下面的示例中,名爲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兩者比較你的實體類。

+0

是的,當然,第一個模塊中的代碼可以作爲例外使用。否則它不會將實體保存到數據庫。問題是,第二塊導致應用程序崩潰。 –

相關問題