Android四大组件之ContentProvider(学习笔记)
ContentProvider
程序通过uri访问数据
继承contentprovider实现一系列对于数据的增删改查等方法,需在AndroidMainfest中完成对于ContentProvider的注册
onCreate方法,在创建后被调用
onDelete方法,根据Uri删除selection指定的条件所匹配的全部记录
insert,根据uri插入Values对应的数据
update,根据uri修改selection指定的条件所匹配的全部记录
query,根据uri查询出selection指定的条件所匹配的全部记录,并且可以指定查询什么列,
gettype返回当前uri的mime类型,如果该uri对应的数据可能包括的多条记录,那么mime类型的字符串,就是以vnd.android.dir/开头,如果该url对应的数据只有一条记录,该mime类型字符串,就是以vndAndroid.cursor.item/开头
UriMatcher类
uriMatcher matcher= new UriMatcher(UriMatcher.No_MATCH);
UriMatcher.No_MATCH表示不匹配任何路径的返回码
matcher.addURI("com.imooc.provider","music",1);
往UriMatcher类里添加一个拼凑的Uri
UriMatcher作为一个Uri的容器,容器里包含着我们即将要操作的Uri
如果通过match方法匹配成功后就返回code值
matcher.match(uri)
首先找到通过addURI方法添加进来的Uri匹配
匹配成功则返回设置的code值,反之,返回一个UriMatcher.NO_MATCH常量(-1)
ContentResolver类
外部应用通过ContentResolver类来对ContentProvider中的数据进行添加、删除、查询
调用getContentResolver()方法来获取ContentResolver对象
import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //在联系人中插入数据 //获取ContentResolver对象,找到指定的ContentProvider,并获取ContentProvider的数据 ContentResolver cr=getContentResolver(); ContentValues contentValues=new ContentValues(); //返回所要寻找文件的Uri Uri uri=cr.insert(RawContacts.CONTENT_URI,contentValues); Long raw_content_id= ContentUris.parseId(uri); contentValues.clear(); //插入人名 contentValues.put(StructuredName.RAW_CONTACT_ID,raw_content_id); contentValues.put(StructuredName.DISPLAY_NAME,"zhangsan"); contentValues.put(StructuredName.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE); uri=cr.insert(ContactsContract.Data.CONTENT_URI,contentValues); //插入电话信息 contentValues.clear(); contentValues.put(Phone.RAW_CONTACT_ID,raw_content_id); contentValues.put(Phone.NUMBER,"1333333333"); contentValues.put(Phone.MIMETYPE,Phone.CONTENT_ITEM_TYPE); uri=cr.insert(ContactsContract.Data.CONTENT_URI,contentValues); } }