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);

    }
}

 

posted @ 2016-10-21 16:56  EdwardRu  阅读(174)  评论(0编辑  收藏  举报