使用Green DAO和内容提供程序

9

我计划在我的项目中使用GreenDAO。我已经通过创建测试项目来测试过它的功能。但是,我有几个要求需要满足。

  1. 我的应用程序数据库将被加密。为此,我们计划使用SQLCipher。我发现了这个链接。我正在学习它,但想知道原始的GreenDAO项目中是否有任何可用的解决方案。

  2. 由于我的应用程序将与服务器同步数据,所以我会使用SyncAdapter,因为我不想自己完成已经由Android框架完成的所有沉重工作。但它需要使用Content Provider才能正常工作。那么,我该如何将GreenDAO与Content Provider配合使用。

更新2

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


2
我使用greendao和syncAdapter。你所需要做的就是在生成实体时添加.addContentProvider()。不幸的是,我对第一个点没有了解。 - dominik4142
@dominik4142,你能帮我一下使用生成的内容提供程序和同步适配器吗?我正在学习如何使用同步适配器。 - Dan Ponce
1个回答

9
我有一个使用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。如果你还没有开始你的项目,那么可以手动创建content provider并使用此处相同的代码创建DaoMaster。祝好运。


嗨,感谢您的回复。我正在研究这个问题。我有一个小疑问。如果我需要使用内容提供程序的“查询和插入”方法进行查询或插入操作,我应该怎么做呢? - Nitish
使用内容提供程序,您可以在任何活动中简单地使用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(); 您可以在此处获取更多文档 链接 - Eefret
对于第一点,只需使用您发布的链接即可。我认为greenDao目前没有原生的sqlCipher支持。 - Eefret
对于您的第二次更新,是的,您可以将所有sqlite表放在一个内容提供程序中,只需在sqliteOpenHelper的onCreate()方法中创建它们并保存CONTENT_URI,然后您可以使用getContentProvider查询它们并提供适当的contentURI。我真的建议您使用ProviGEN,它会在不过多抽象化代码的情况下简化您的工作。 - Eefret
1
我怀疑使用带有缓存的GreenDAO,并且从内容提供者进行更新/删除操作可能会使那些存储在GreenDAO缓存中的对象失效。有人知道如何处理这个问题吗? - WindRider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接