![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=1739588072-7soGe2Cfj4kzb9A5XuCmhZDglXN24GB2-0-c84a27a200cc2b6d398bdfb8c7c11bdc)
2)query():在内容提供器中查询数据。同SQLite数据中的query()差不多,只是第一个参数不一样,这里的第一个参数是内容Uri:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/43_03.jpg?sign=1739588072-wSJXuugJ0zYJqLb9Rp7S5HH3fwwi7Y3w-0-ec64afc952a37c3de1d03b87ece8e178)
3)insert():在内容提供器中添加一条数据。第一个参数同样是内容Uri,最后返回的是该新添加进来的数据的Uri:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/43_04.jpg?sign=1739588072-IIB7dCVS5zAfmVOs1wNfQC3lzTNXELxW-0-461e974570119fc8acff15aedf573135)
4)update():更新内容提供器的数据。同样,第一个参数是内容Uri,最后返回的是被更新的行数:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/43_05.jpg?sign=1739588072-qVSQXRJqLQV9HZFuaPHtxmd9fuYJQiD6-0-2602da760a389338b88f3aef2f1a7fb7)
5)delete():删除内容提供器的数据。第一个参数是Uri,最后返回的是被删除的行数:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/43_06.jpg?sign=1739588072-V47i4veXtMZUjSLW8U3SYT9xpQZU2OvA-0-c81cfcee66f2d6a3d361b36322b26f47)
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=1739588072-JuFC8SWXJMvPbEQU24qR3icDXeILwepv-0-7ccff8abfd1b0b48271f29753017a397)
而如果现在要匹配pingred表中任一行数据的内容Uri标准格式,则如下:
![](https://epubservercos.yuewen.com/FCD2F4/20516007501589706/epubprivate/OEBPS/Images/44_02.jpg?sign=1739588072-TJD8NLYUnVgtgFIxeMj7XePHeDfjDPV0-0-c4246e4e262b40ac3a2f1004d0390f08)
然后调用UriMatcher.addURI()把authority、path和一个自定义的代码这3个参数传进去,最后就可以调用UriMatcher.match(),根据内容Uri对象解析出一个代码,来跟之前创建好的自定义代码进行匹配,就能判断出要增删改查的是哪张表的哪行数据了。