Android ContentProvider与ORMLite

man*_*uai 9 android ormlite android-contentprovider

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

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

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

min*_*haz 15

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

但除了你提到的东西之外,它们还有内容提供商的其他好处.

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

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

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

  4. 使用Android安全和权限功能.

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

现在我正在开展一个项目,我们有大约20个桌子.我为每个表创建了一个DAO.其中基本上内部使用Content provider.

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
    }
}
Run Code Online (Sandbox Code Playgroud)

我本可以在没有内容提供商的情况下完成,现在当前的要求可以正常工作,但我仍然选择这条路线.你会问为什么?

  • 异步操作
  • 易于与平台/云集成.
  • 减少代码减少bug,减少戏剧性(想想如果我必须实现我们刚刚讨论过的那些任务)

而且,最好的部分来自任何Activity我只需使用我的DAO来访问数据库.

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

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