Android ContentProvider与ORMLite

我正在使用内容提供程序来pipe理我的应用程序数据,这是不与其他应用程序共享。 但是,有一些样板代码,例如将光标转换为域对象。 ORMLite提供了一个更优雅的方式,直接将数据库条目映射到域对象。 所以我想用ORMlitereplace内容提供者。 但是我有一些担心:

  1. 内容提供者在multithreading环境中工作正常。 我不知道ORMlite是否是线程安全的。
  2. 内容提供者可以广播数据库更改。 我不知道ORMLite是否有这种支持。
  3. Android提供一些实用工具,如AsynQueryHandler,CursorLoader来做asynchronous查询数据库。 如果我使用ORMLite,我必须显式创build一个线程或AsyncTask来执行查询。

是否应该用ORMLitereplace内容提供者?

Solutions Collecting From Web of "Android ContentProvider与ORMLite"

我不认为,你可以比较一个与内容提供商的ORM。 ORMLite提供以下function链接到用户和开发时有完全单独的目标。

但除了你提到的事情之外,他们还有内容提供者的其他一些好处。

  1. 如果你想分享多个应用程序或进程之间的date。 可能现在你还没有任何计划,但是看起来你的应用程序对数据库来说很重要,而且如果你打算与第三方或者你的另一个应用程序共享你的数据,你可以select与内容提供商一起使用。

  2. 内容提供者在所有Android版本中都是标准的,这也意味着你的应用程序是安全的。 我很确定ORMLite也是稳定的。 但是,你是否真的想冒这个风险,特别是如果这不能节省你的时间,或者你没有任何业务要​​求这样做。 Android API已经被分割了,你想要承担另一个工作负载吗?

  3. 如果要将数据上传到云,可以很容易地与SyncAdapter集成

  4. 使用android安全和权限function。

您对处理Content Provider所需的额外代码是正确的。

现在我正在做一个项目,我们有20桌左右。 我为每个表创build了一个DAO。 基本上内部使用内容提供者。

DAO-> Content Provider-> SQL Lite Open Helper

Class XyzDao{ private final Context mContext; XyzDao(Context context){ this.mContext=context; } public String getMyData(){ //content provider code return myData; } public void setMyData(String x, int y, double z){ //content provider code to set the data } } 

我可以做没有内容提供商,现在的当前要求,将工作得很好,但我仍然select这条路线。 你会问为什么?

  • asynchronous操作
  • 易于与平台/云集成。
  • 更less的代码less错误less戏(想想如果我必须执行我们刚才讨论的那些任务)

而且,最好的部分是从任何活动,我可以简单地使用我的DAO访问数据库。

或者,您可以直接从您的DAO访问SQLLiteOpenHelper 。

在一天结束时,每个select取决于您的业务需求。 如果你有很多的持久化对象ORMLite可能是一个不错的select。

一方面,我更喜欢使用OrmLite制作ER模型,另一方面ContentProvider提供了一些如上所述的好处。 这就是为什么我实现了通用的ContentProvider,它允许访问OrmLite ER模型。 这里是https://github.com/blandware/android-atleap

我创build了一个可以使用的ORM库,它基本上将两个用例结合起来,称为CPOrm ,并将按照您的要求进行操作。 你可以用它来pipe理你的数据库的创build和查询,一切都是通过android内容提供者完成的。 性能也很好,每秒查询返回9000+个结果。