GreenDAO不会在应用程序重启后保留数据

时间:2018-03-14 11:32:16

标签: android greendao

我想使用GreenDAO来保持持久性,但我不能让它持久保存我的数据。

只要未重新启动应用程序,数据就会被正确保存和加载。

一旦我将应用程序移开并从头开始重新打开,GreenDAO就看不到以前的数据(在模拟器和真实设备上都有)。

这是我的实体:

@Entity
public class TestSingleEntity {
    @Id(autoincrement = true)
    Long id;

    int someNumber;

    public TestSingleEntity(int someNumber) {
        this.someNumber = someNumber;
    }

    @Generated(hash = 787203968)
    public TestSingleEntity(Long id, int someNumber) {
        this.id = id;
        this.someNumber = someNumber;
    }

    @Generated(hash = 1371368161)
    public TestSingleEntity() {
    }
// ... some more stuff
}

这是我将实体插入数据库的方式:

Random rnd = new Random();
TestSingleEntity singleEntity = new TestSingleEntity();
singleEntity.setSomeNumber(rnd.nextInt());

DaoSession session = ((MyApp)getApplication()).getDaoSession();
TestSingleEntityDao dao = session.getTestSingleEntityDao();
dao.insert(singleEntity);

Log.d("tgd", "Inserted an entity with id " + singleEntity.getId());

这就是我读它们的方式:     查询query = dao.queryBuilder()。orderAsc(TestSingleEntityDao.Properties.SomeNumber).build();     StringBuilder builder = new StringBuilder();

List<TestSingleEntity> result = query.list();
Log.d("size", result.size());
for (TestSingleEntity testSingleEntity : result) {
    Log.d("entity", testSingleEntity.toString());
}

正如我所说的,只要我留在应用程序中(在不同的活动中移动就可以了),每次调用insert时,都会创建一个具有新ID的新实体。一旦我重新启动应用程序,它就会回到原点。

设置直接来自GitHub page。我究竟做错了什么?感谢

1 个答案:

答案 0 :(得分:0)

免责声明:自上次使用以来,GreenDAO经历了重大变化,因此这完全基于在github上阅读代码。

显然,GreenDAO记录不足的DevOpenHelper会删除升级后的所有表格,所以真正的问题是为什么onUpgrade被调用时显然还没有对模式进行更改版。尝试查找提及删除表的日志行,如DevOpenHelper模板中所述。

无论如何,使用OpenHelper代替应该解决问题。