9

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

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

我是否应该用 ORMLite 替换内容提供者?

4

4 回答 4

15

我不认为,您可以与带有 Content Provider 的 ORM 进行比较。ORMLite 向用户提供以下功能链接,并在开发时具有完全独立的目标。

但除了你提到的事情之外,它们是内容提供者的其他几个好处。

  1. 如果您想在多个应用程序或进程之间共享日期。可能现在您没有任何计划这样做,但似乎您的应用程序在数据库上很重,并且将来如果您计划与第三方或您的另一个应用程序共享您的数据,您可以选择与内容提供商。

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

  3. 如果您想将数据上传到云端,可以轻松与SyncAdapter集成

  4. 使用 android 安全和权限功能。

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

现在我正在做一个项目,我们有大约 20 张桌子。我为每个表创建了一个 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
    }
}

如果没有 Content Provider,我本来可以做到的,而目前的要求可以很好地工作,但我仍然选择了这条路线。你可能会问为什么?

  • 异步操作
  • 与平台/云轻松集成。
  • 更少的代码更少的错误所以更少的戏剧性(想想我是否必须实现我们刚刚讨论的那些任务)

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

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

归根结底,每个选择都取决于您的业务需求。如果您有很多持久性对象,ORMLite 可能是一个不错的选择。

于 2013-09-13T06:52:35.327 回答
1

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

于 2014-01-08T16:42:51.650 回答
0

https://github.com/jakenjarvis/Android-OrmLiteContentProvider/blob/master/README.md为您的任务提供解决方案。

于 2014-08-11T15:38:59.897 回答
0

我创建了一个你可以使用的 ORM 库,它基本上可以为你结合这两个用例,它被称为CPOrm ,它会满足你的需求。您可以使用它来管理数据库的创建和查询,一切都通过 android 内容提供程序完成。性能也不错,查询每秒返回 9000 多个结果。

于 2015-04-18T11:10:40.367 回答