您的位置:首页 > 移动开发 > Android开发

android developer tiny share-201704017

2017-04-18 01:02 162 查看
今天继续讲android的ContentProvider,讲创建自己的ContentProvider的该如何设计数据存储。android api提供了基于SQLite数据库的存储,还有文件存储,网络存储。

以下是android developer官网的讲解:

设计数据存储

内容提供程序是用于访问以结构化格式保存的数据的接口。在您创建该接口之前,必须决定如何存储数据。 您可以按自己的喜好以任何形式存储数据,然后根据需要设计读写数据的接口。

以下是 Android 中提供的一些数据存储技术:

Android 系统包括一个 SQLite 数据库 API,Android 自己的提供程序使用它来存储面向表的数据。 SQLiteOpenHelper 类可帮助您创建数据库,SQLiteDatabase 类是用于访问数据库的基类。请记住,您不必使用数据库来实现存储区。提供程序在外部表现为一组表,与关系型数据库类似,但这并不是对提供程序内部实现的要求;
为了存储文件数据,Android 提供了各种面向文件的 API。 如需了解有关文件存储的更多信息,请阅读数据存储主题。 如果您要设计提供媒体相关数据(如音乐或视频)的提供程序,则可开发一个合并了表数据和文件的提供程序。
要想使用基于网络的数据,请使用 java.net 和 android.net 中的类。 您也可以将基于网络的数据与本地数据存储(如数据库)同步,然后以表或文件的形式提供数据。 示例同步适配器示例应用展示了这类同步。

数据设计考虑事项
以下是一些设计提供程序数据结构的技巧:

表数据应始终具有一个“主键”列,提供程序将其作为与每行对应的唯一数字值加以维护。 您可以使用此值将该行链接到其他表中的相关行(将其用作“外键”)。 尽管您可以为此列使用任何名称 ,但使用 BaseColumns._ID 是最佳选择,因为将提供程序查询的结果链接到 ListView 的条件是,检索到的其中一个列的名称必须是 _ID;
如果您想提供位图图像或其他非常庞大的文件导向型数据,请将数据存储在一个文件中,然后间接提供这些数据,而不是直接将其存储在表中。 如果您执行了此操作,则需要告知提供程序的用户,他们需要使用 ContentResolver 文件方法来访问数据;
使用二进制大型对象 (BLOB) 数据类型存储大小或结构会发生变化的数据。 例如,您可以使用 BLOB 列来存储协议缓冲区或 JSON 结构。

您也可以使用 BLOB 来实现独立于架构的表。在这类表中,您需要以 BLOB 形式定义一个主键列、一个 MIME 类型列以及一个或多个通用列。 这些 BLOB 列中数据的含义通过 MIME 类型列中的值指示。 这样一来,您就可以在同一个表中存储不同类型的行。 举例来说,联系人提供程序的“数据”表 ContactsContract.Data 便是一个独立于架构的表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息