详解 Android content provider
2010-03-15 15:35:00 来源:WEB开发网当对数据修改时,处于善意,会调用call ContentResolver.notifyChange()函数来通知监听者。除了定义子类,还要采取其他步骤来简化客户端的工作,使这个类更容易使用: · 定义 public static final Uri命名为 CONTENT_URI,它是一个字符串,代表了content provider能够处理的全部内容。 必须为这个值定义唯一的字符串。最佳的方法是使用content provider的完全类名 (小写)。例如, TransportationProvider类的定义如下的URI public static final Uri CONTENT_URI = Uri.parse("content://com.example.codelab.transporationprovider"); 如果Provider有子表,为每一个子表都要定义CONTENT_URI常量。这些URIs 应该具备相同的权限,只能通过它们的路径来区分。例如: content://com.example.codelab.transporationprovider/train content://com.example.codelab.transporationprovider/air/domestic content://com.example.codelab.transporationprovider/air/international · 定义Content Provider返回给客户端的列名。 如果使用数据库,这些列名通常与SQL数据库类名同名。还要定义public static字符串常量,客户端可以在查询或其它指令中指定列要确保为记录的ID提供一个命名为"_id" (常量 _ID)的整数列。无论是否还有其它字段(如URI)能够唯一标识记录,都应该定义这个ID字段。如果使用SQLite数据库,_ID应为下面的类型: INTEGER PRIMARY KEY AUTOINCREMENT AUTOINCREMENT描述符是可选的。如果没有它,SQLite载ID字段添加比现存ID列中最大的数大一的数。如果删除了最后一行,那么增加的下一行将使用与被删除行相同的ID。 AUTOINCREMENT使SQLite增加到目前最大值的下一个值,而无论这个最大值是否被删除。
· 仔细考证每个列的数据类型,客户端将使用这个信息来读数据。 · 如果要处理新的数据类型,必须在ContentProvider.getType()函数的实现中定义一种新的MIME类型返回。这种数据类型部分依赖于提交给getType()函数的content: URI 是否局限于请求某一特定记录。针对单一记录有一种MIME类型的格式,针对多记录则是另外一种格式。利用 Uri 方法有助于确定请求的是什么。下面是每种类型的通用格式: o 对单一记录: vnd.android.cursor.item/vnd.yourcompanyname.contenttype 例如,请求train记录122的URI格式如下: content://com.example.transportationprovider/trains/122 返回的MIME类型:
更多精彩
赞助商链接