GreenDAO 不会在应用程序重新启动时保留数据

Posted

技术标签:

【中文标题】GreenDAO 不会在应用程序重新启动时保留数据【英文标题】:GreenDAO does not persist data across application restart 【发布时间】:2018-03-14 11:32:16 【问题描述】:

我想使用 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());

这就是我阅读它们的方式: 查询查询 = 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】:

免责声明:自从我上次使用 GreenDAO 以来,它已经发生了重大变化,所以这纯粹是基于阅读他们在 github 上的代码。

显然,GreenDAO 记录不佳的 DevOpenHelper 在升级时删除了所有表,所以真正的问题是为什么在架构版本没有发生变化的情况下调用 onUpgrade。尝试查找提到删除表的日志行,如DevOpenHelper 的模板中所述。

无论如何,使用OpenHelper 应该可以解决问题。

【讨论】:

以上是关于GreenDAO 不会在应用程序重新启动时保留数据的主要内容,如果未能解决你的问题,请参考以下文章

重新启动浏览器后,我的cookie不会保留

GreenDao 兼容升级,保留旧数据的---全方面解决方案

重新启动应用程序时不会加载 ArrayList

在我刷新数据库连接之前,Mongoose 不会获取数据

Objective-C:标签栏项目的标题在登录页面后不会改变,但在从xCode重新启动时有效吗?

GreenDao 无法建立数据库