Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 何时使用内容提供商_Android_Android Contentprovider - Fatal编程技术网

Android 何时使用内容提供商

Android 何时使用内容提供商,android,android-contentprovider,Android,Android Contentprovider,我知道内容提供商允许在应用程序之间公开共享数据。然而,我想知道是否有人想过让内容提供商只在你自己的应用程序中使用。这样做有什么好处吗?有什么缺点吗 在过去,我刚刚实现了SQliteOpenHelper来访问数据库中的数据,但我正在考虑创建一个内容提供者。我觉得请求数据的URI方法是清晰简洁的。另一方面,仅为我的应用程序使用内容提供者是否是多余的(因为在其中我将有一个SQliteOpenHelper类)和超出我需要的工作量?如果您不打算共享数据,请不要考虑内容提供者。它们功能强大,但很难编写,如果

我知道内容提供商允许在应用程序之间公开共享数据。然而,我想知道是否有人想过让内容提供商只在你自己的应用程序中使用。这样做有什么好处吗?有什么缺点吗


在过去,我刚刚实现了SQliteOpenHelper来访问数据库中的数据,但我正在考虑创建一个内容提供者。我觉得请求数据的URI方法是清晰简洁的。另一方面,仅为我的应用程序使用内容提供者是否是多余的(因为在其中我将有一个SQliteOpenHelper类)和超出我需要的工作量?

如果您不打算共享数据,请不要考虑内容提供者。它们功能强大,但很难编写,如果您打算在内部使用它们,那么实现它们将是愚蠢的

然而,我想知道是否有人想过让内容提供商只在你自己的应用程序中使用


当然。。。例如,对于我编写的一个旧TODO list应用程序,我必须编写一个内容提供程序,以允许其他应用程序检索和访问任务状态。这是需求的一部分,但更重要的是,它是有意义的,并且使应用程序变得更好。

看看MOTODEV Studio for Eclipse。它是一个扩展Eclipse的开发环境。他们有一个工具,您可以在其中为数据库自动生成内容提供者。如果内容提供商使您的数据更容易访问,并且对性能没有显著影响,请继续使用它。在大多数情况下都是这样。

我认为使用
内容提供者绝对是一个好主意,即使您不打算将其公开

最好的做法是对数据提供额外的抽象级别,以便更容易在内部进行更改。如果您决定以后更改基础数据库结构,该怎么办?如果使用
ContentProvider
,则可以包含其中的所有结构更改,如果不使用,则必须更改受结构更改影响的所有代码区域。此外,能够重用相同的标准API来访问数据,而不是在低级别访问数据库时乱扔代码,这也很好

此外,您可能希望在将来公开您的数据。如果您事先不使用
ContentProvider
,那么以后将很难对其进行改装

然后,Android的其他部分需要/推荐
ContentProvider
,例如使用
SyncAdapter
s时,以及如果您想要一个涉及数据访问的应用程序小部件


总之,预先编写
ContentProvider
所涉及的开销非常小(一旦您了解了API,这无论如何都是一个好主意),因此这样做是有意义的,即使对于私有数据也是如此。

我同意ContentProvider有点难掌握,但它们肯定很有帮助,即使你想在自己的应用程序内部使用它们。最好的一点是,您可以为合适的URI定制contentproviders

下面是一个场景,在这个场景中,您的数据库中可能有5个表,但在使用它们之前,您需要按特定顺序连接其中的一些表。并为每个连接创建一个内容URI。然后,您可以将每个URI用作一个表:)


我建议您继续使用Content Provider,您会惊奇地发现它的强大功能。

如果您不希望与其他应用程序共享数据,请不要使用Content Provider。使用简单的sqlitedatabase执行数据库操作。使用内容提供商存储机密数据时要小心,因为您的机密信息可能会被其他应用程序访问

在我看来,内容提供商有很多优势,更不用说与其他应用程序共享数据了。如果您需要使用同步适配器与服务器同步,请使用谷歌云消息,在数据库中的基础数据更改时使用加载程序自动更新UI,实现搜索,使用小部件。。。那么内容提供商就是为您服务的

我希望您遵循上的指南,因为有一天您可能需要实现附加到内容提供商的上述一些功能

顺便说一句,您可以使用文档中所述的

在不到5分钟的时间内快速构建数据库和CP:

如果使用的是SQLite数据库,则不需要提供程序 完全在您自己的应用程序中

那么,为什么要费心开发这种开销呢?你想要更简单更快的开发,对吗?因此,一层抽象(SQLiteOpenHelper派生)就足够了


没有很好的理由不要创建实体。

简言之,
内容提供商
有助于有效地管理数据。我建议使用它们,原因如下

  • 它充当UI和数据库之间的抽象层。您可以在ContentProviders中实现数据验证,以验证用户输入的数据。它还允许您修改数据库的结构,而无需触摸UI和其他部分
  • 它们与其他android框架类(如
    SyncAdapter
    )配合得很好。例如,当数据库中的值使用ContentProviders和
    游标加载程序更改时,您可以自动刷新列表。如果没有ContentProviders,您必须自己实现许多类似的功能
  • 我们可以安全地将我们的私人数据公开给其他应用程序。使用ContentProviders可以让我们轻松安全地与其他应用程序共享数据

因此,即使您现在不需要这些功能中的任何一项,您将来也可能需要这些功能,最好现在就多做一点并实现它们。

使用内容提供商ca