【问题标题】:Using Green DAO with content provider将 Green DAO 与内容提供者一起使用
【发布时间】:2014-09-27 09:15:28
【问题描述】:

我打算在我的项目中使用GreenDAO。我已经通过创建一个测试项目对其进行了测试。但是,我有几个要求,我需要满足。

  1. 我的应用程序的数据库将被加密。为此,我们计划使用SQLCipher。我找到了这个link。我正在研究它,但有兴趣知道原始 GreenDAO 项目中是否有任何可用的东西。

  2. 由于我的应用程序将与服务器同步数据,因此我将使用SyncAdapter,因为我不想自己完成所有已由 Android 框架完成的繁重工作。但它需要Content Provider 才能使用。那么,我怎样才能将 GreenDAO 与 Content Provider 一起使用。

更新 2

我的项目有七个实体。我在实体上使用了addContentProvider()。并且生成了七个不同的内容提供者。有没有办法在一个内容提供者中拥有所有 sqlite 表?

【问题讨论】:

  • 我将 greendao 与 syncAdapter 一起使用。您需要做的就是在生成实体时添加 .addContentProvider() 。不幸的是,我不知道第一点。
  • @dominik4142 你能给我一点帮助吗?我正在学习如何使用同步适配器。

标签: android database orm android-sqlite greendao


【解决方案1】:

我有一个使用 greenDao 和内容提供商运行的项目。首先,我使用ProviGen 只是为了生成内容提供程序并使用内容解析器进行查询,但后来项目变得非常大,所以我决定实现 greenDAO,我所做的是使用 provigen 中创建的 contentProvider 来获取数据库从中,所以现在我将 contentProvider 和 provigen 都附加到同一个数据库。我鼓励您创建您的 ContentProvider 并将您的 daoMaster 附加到使用它生成的数据库中。这是我在 onCreate 应用程序类中使用的一段代码:

private static DaoSession daoSession;
public void onCreate(){
SQLiteOpenHelper myAppOpenHelper = new ProvigenContentProvider().openHelper(this); //ContentProvider created previously
SQLiteDatabase db = myAppOpenHelper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}

之后使用 greendao 即可:

public DaoSession getDaoSession(){
        return daoSession;
}

你可以同时拥有 contentProvider 和 greenDao。如果您还没有开始您的项目,请手动创建内容提供者,并在此处使用相同的代码创建 DaoMaster。祝你好运

【讨论】:

  • 您好,感谢您的回复。我正在寻找它。我有一个小小的疑问。如果我需要使用内容提供者的query and insert 方法查询或插入,我不清楚我需要做什么
  • 使用内容提供者你可以在任何活动中简单地getContentResolver.query(String content_uri, String[] column_names, String where_clause, String[] where_parameters, String order); 或者如果在片段中执行之前使用getActivity.,使用greendao更容易你只需要myObject = session.getMyDao().queryBuilder().where(MyDao.Properties.Id.eq(1)).uniqueOrThrow();你可以获得更多的文档here
  • 对于第 1 点,只需使用您发布的链接,我认为 greenDao 目前没有原生 sqlCipher 支持
  • 对于您的更新 #2,是的,您可以将所有 sqlite 表放在一个内容提供程序中,只需在 sqliteOpenHelper 的 onCreate() 方法中创建它们并保存 CONTENT_URI 然后您可以使用查询它们getContentProvider 并提供正确的 contentURI。我真的建议您使用 ProviGEN,它会简化您的工作,而不会在您的代码中进行太多抽象。
  • 我怀疑将 GreenDAO 与来自内容提供商的缓存 + 更新/删除一起使用可能会使存储在 GreenDAO 缓存中的那些对象无效。有人知道如何处理吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多