android ContentProvider

 

ContentProvider
概述:1、ContentProvider是程序间共享数据的一种机制,是Android提供的数据访问和存储的标准接口。
         2、它屏蔽了数据底层的细节实现,提高了数据操作的安全性,当我们不希望访问者直接操作我们的底层

                    数据但又要为其提供数据接口时,我们可以为自己的数据建立ContentProvider以供外部程序访问。
      3、ContentProvider是由ContenResolver代理得到的,并不需要用户手动实例化。
      4、注册ContentProvider  content://com.ssj.android.provider.UserProvider/tb_user/122
          <provider android:name="UserProvider" android:authorities="com.ssj.android.provider.UserProvider"/>

 

abstract ContentProvider

abstract boolean onCreate();
	abstract Uri insert(Uri uri,ContentValues values);
	abstract int delete(Uri uri,String where,String[] whereArgs);
	abstract Cursor query(Uri uri,String[] columnNames,Stirng where,
                                            String whereArgs,String order);
	abstract update(Uri uri,ContentValues values,String where,String whereArgs);
	
	abstract String getType(Uri uri);//返回指定资源的类型

 

abstract ContentResolver

     通过传入的Uri获得相应的ContentProvider,在通过ContentProvider执行相应的数据操作方法。

 

ContentResolver(Context context);//可通过Activity的this。方式得到
	
	final Uri insert(Uri uri,ContentValues values);
	final int delete(Uri uri,String where,String[] whereArgs);
	final Cursor query(Uri uri,String[] columnNames,Stirng where,
                                      String whereArgs,String order);
	final update(Uri uri,ContentValues values,String where,String whereArgs);
	
	final String getType(Uri uri);//返回指定资源的类型
	final InputStream  openInputStream(Uri uri);
	final outputStream openOutputStream(Uri uri);

Uri  1、格式:  协议头://唯一标示(可随意写,保证唯一性即可,通常为包名.类名)/数据路径/记录id
             content://com.ssj.android.provider/tb_user/122  ----------操作数据库文件user表id为122的记录
             content://com.ssj.android.provider/user\name    ----------操作xml文件user中的name节点
     2、通过UriMatcher 的match()method为执行特定SQL语句提供判断条件
     3、ContentProvider的insert方法要求返回Uri,所以要解析uri。
    static Uri parse(String uri);
UriMatcher:
    1、在ContentProvider中建立UriMatcher匹配库。
    2、当没有匹配项时返回-1
    3、#匹配一个数字,  *匹配人一个字符
    UriMatcher(int matchCode);
    void addURI(String authority,String pathDate,int matchCode);//authourity:协议头,pathDate:数据路径 ,matchCode:匹配时的返回值
    int match(Uri uri);   
URIUtils
ContentUris:用于向Uri附加id或从Uri中提取id
    ContentUrils();
    static long parseId(Uri uri);//从Uri中解析id
    static withAppendedId(Uri uri,long id);//向Uri中附加id
UriMatcher示例:

    Class MyContentProvider extends ContentProvider
	{	//用户表tb_user(userid,username),日志表tb_rz(rzid,rzbt,rznr,userid)
        private final static int USERS=1;
        private final static int USER=11;
		private final static int RZS=2;
		private final static int RZ=21;
		private UriMatcher myMatcher=new UriMatcher(-1);
		//建立uri匹配库
		static
		{
		   myMatcher.addUri("com.ssj.android.provider","tb_user",USERS);
		   myMatcher.addUri("com.ssj.android.provider","tb_user/#",USER);
		   myMatcher.addUri("com.ssj.android.provider","tb_rz",RZS);
		   myMatcher.addUri("com.ssj.android.provider","tb_rz/#",RZ);
		}
		
		public Stirng getType(Uri uri)
		{
		   int macth=myMatcher.macth(uri);
		   switch(macth)
		   {
		      case USERS:  
			         return "vnd.android.cursor.dir/tb_user"; break;
			  case USER:  
			         return "vnd.android.cursor.item/tb_user"; break;
			  case RZS:  
			         return return "vnd.android.cursor.dir/tb_rz"; break;
			  case RZ:  
			         return "vnd.android.cursor.item/tb_rz"; break;		
			  default:
			  return null;
		   }
		}
	}
  

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值