内容提供器ContentProvider 可以用来实现跨程序共享数据。
ContentProvider一般有两种:系统自带的(如电话簿、短信、媒体库等等)、自定义的
这里要讲的是现有(系统自带)的简单用法:
- 首先获取ContentResolver对象:Context类中的ContentResolver getContentResolver()方法
(ContentResolver提供了一系列的方法进行数据的增删改查(CRUD):inert()、update()、delete()、query())
①增:inert(uri, values)
参数一:uri,uri=Uri.parse("内容contentUri"),contentUri==content://程序包名.provider/表名
( uri好处就是可以区分哪个程序,而且,还具体哪个表)
参数二:待插入的数据,一般借助ContentValues对象(他有put(key, value)往自己添加数据)
②删:delete(uri, "selections", new String[]{第二个参数的值})
参数一:uri
参数二:selections,约束条件,用于指定操作哪些行,对应sql语句中的where 中的条件,如col1=? and col2>?
参数三:new String[]{第二个参数的值},就是按顺序对应第二个参数的占位符?的值
③改:update(uri, values, "selections", new String[]{第二个参数的值})
参数一:uri
参数二:新的数据,一般借助ContentValues对象(他有put(key, value)往自己添加数据)
参数三:selections,约束条件,用于指定操作哪些行,对应sql语句中的where 中的条件,如col1=? and col2>?
参数四:new String[]{第二个参数的值},就是按顺序对应第二个参数的占位符?的值
④查:Cursor query( uri, projection, "selections", new String[]{第二个参数的值})
参数一:uri,
参数二:指定查询的列,对应的是sql中selection 列1,列2.....
参数三:selections,约束条件,用于指定操作哪些行,对应sql语句中的where 中的条件,如col1=? and col2>?
参数四:new String[]{第二个参数的值},就是按顺序对应第二个参数的占位符?的值
返回值:Cursor对象(注意,操作完一定要记得调用close()方法关闭Cursor)
获取到了ContentResolver对象后就可以使用上面的4个方法进行增删改查,和sqliteDataBase差不多,区别就是uri