![Android程序员面试笔试宝典](https://wfqqreader-1252317822.image.myqcloud.com/cover/682/39130682/b_39130682.jpg)
上QQ阅读APP看书,第一时间看更新
1.4.2 自定义ContentProvider
首先继承ContentProvider类,然后重写下面6个抽象方法:
1)onCreate():内容提供器初始化时触发。在这里进行数据库的创建与升级,当访问数据时才开始初始化:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/43_02.jpg?sign=1739911631-9m7mWVj5XGuP6oGJU7iCVVNFvHOycPa8-0-6fd8a8b44ab50c87d3c54c0c08f99474)
2)query():在内容提供器中查询数据。同SQLite数据中的query()差不多,只是第一个参数不一样,这里的第一个参数是内容Uri:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/43_03.jpg?sign=1739911631-WMETyuiAmHiewN87eSh5FNmNNQutIThP-0-32e4af992025eda23a20801a772747c4)
3)insert():在内容提供器中添加一条数据。第一个参数同样是内容Uri,最后返回的是该新添加进来的数据的Uri:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/43_04.jpg?sign=1739911631-77ofeE4mmiZagZKKCOuYxgQdgqf71p3d-0-9462a468d3c21f9e1353848911069afd)
4)update():更新内容提供器的数据。同样,第一个参数是内容Uri,最后返回的是被更新的行数:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/43_05.jpg?sign=1739911631-y4vToHFFrxgQ8QY7MpMHd592YwEykL3E-0-7dd1e4210865268bf6b4df2956f8414a)
5)delete():删除内容提供器的数据。第一个参数是Uri,最后返回的是被删除的行数:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/43_06.jpg?sign=1739911631-N1mleJjsitNTTbiSaoEI7uTJg7DHne2w-0-6649c672da173ed3f1e20484530aed8e)
6)getType():传入参数是Uri,返回的是相应的MIME类型。什么是MIME字符串,一个内容Uri对应的MIME字符串以vnd开头,然后接上android.cursor.dir/或android.cursor.item/,最后再接上vnd.<authority>.<path>。
因为要匹配内容Uri,所以匹配任意表的内容Uri标准格式:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/44_01.jpg?sign=1739911631-SFhopUEBlYO80ooWXbBYoPzmlatad4FM-0-15827f47fc2790139f736bdb96f5cbd3)
而如果现在要匹配pingred表中任一行数据的内容Uri标准格式,则如下:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/44_02.jpg?sign=1739911631-Xw9qDXpoXYqKhlhMTICTUmUXw4DBpzhd-0-8d372d70b3edd560bb4a9b77bdc5fd50)
然后调用UriMatcher.addURI()把authority、path和一个自定义的代码这3个参数传进去,最后就可以调用UriMatcher.match(),根据内容Uri对象解析出一个代码,来跟之前创建好的自定义代码进行匹配,就能判断出要增删改查的是哪张表的哪行数据了。