
上QQ阅读APP看书,第一时间看更新
1.4.2 自定义ContentProvider
首先继承ContentProvider类,然后重写下面6个抽象方法:
1)onCreate():内容提供器初始化时触发。在这里进行数据库的创建与升级,当访问数据时才开始初始化:

2)query():在内容提供器中查询数据。同SQLite数据中的query()差不多,只是第一个参数不一样,这里的第一个参数是内容Uri:

3)insert():在内容提供器中添加一条数据。第一个参数同样是内容Uri,最后返回的是该新添加进来的数据的Uri:

4)update():更新内容提供器的数据。同样,第一个参数是内容Uri,最后返回的是被更新的行数:

5)delete():删除内容提供器的数据。第一个参数是Uri,最后返回的是被删除的行数:

6)getType():传入参数是Uri,返回的是相应的MIME类型。什么是MIME字符串,一个内容Uri对应的MIME字符串以vnd开头,然后接上android.cursor.dir/或android.cursor.item/,最后再接上vnd.<authority>.<path>。
因为要匹配内容Uri,所以匹配任意表的内容Uri标准格式:

而如果现在要匹配pingred表中任一行数据的内容Uri标准格式,则如下:

然后调用UriMatcher.addURI()把authority、path和一个自定义的代码这3个参数传进去,最后就可以调用UriMatcher.match(),根据内容Uri对象解析出一个代码,来跟之前创建好的自定义代码进行匹配,就能判断出要增删改查的是哪张表的哪行数据了。