Android学习笔记整理(15)--内容提供者和Uri

版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。 https://blog.csdn.net/qq_29477223/article/details/80950728

1.内容提供者简介

        内容提供者是Android中四大组件之一,用于保存和检索数据,是不同应用程序之间共享数据的接口。

        ContentProvider是不同应用程序之间进行数据交换之间标准API,以Uri的形式对外提供数据,允许其他应用操作本应用数据。其他应用则使用ContentResolver,并根据ContentProvider提供的Uri操作指定数据。


        A应用需要使用ContentProvider暴露数据,才能被其他应用操作。B应用必须通过ContentResolver操作A应用暴露出来的数据,而A应用会将操作结果返回给ContentResolver,然后ContentResolver再将操作结果返回给B应用。

2.创建内容提供者

      在创建一个内容提供者时,首先需要定义一个类继承android.content包下的ContentProvider类。ContentProvider类是一个抽象类,子类需要重写它的onCreate()、delete()、getType()、insert()、query()、update()这几个抽象方法。

public class PersonDBProvider extends ContentProvider{
       //创建ContentProvider调用
	public boolean onCreate() {
		return false;
	}
       //根据传入的Uri查询指定条件下的数据
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		return null;
	}
        //用于返回指定Uri代表数据的MIME类型
	public String getType(Uri uri) {
		return null;
	}
        //根据传入的Uri插入数据
	public Uri insert(Uri uri, ContentValues values) {
		return null;
	}
        //根据传入的Uri删除指定条件下的数据
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		return 0;
	}
        //根据传入的Uri更新指定条件下的数据
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		return 0;
	}
}

注意:创建内容提供者类之后一定要在清单文件注册

<provider
       android:name="com.example.db.PersonDBProvider"
       android:authorities="com.example.db.personprovider" >
</provider>

3.Uri简介

      Uri(Uniform Resource Identifier)统一资源定位符,Uri是由scheme、authorite、path三部分组成

        scheme部分“content//:”是一个标准的前缀,表明这个数据被内容提供者所控制,它不会被修改。authorities部分“com.example.personprovider”是在清单文件中指定的android:authorities属性值,该值必须唯一,它表示了当前的内容提供者。path部分“/person”代表资源(或者数据),当访问者需要操作不用数据时,这个部分是动态改变的。

        Uri.parse(String str)方法是将字符串转化成Uri对象的。为了解析Uri对象,Android系统提供了一个辅助工具类UriMatcher用于匹配Uri。

         public UriMatcher(int code):创建UriMatcher对象时调用,参数通常使用UriMather.NO_MATCH,表示路径不满足条件返回-1。

        public void addURI(String authority,String path,int code):添加一组匹配规则,authority即Uri的authoritites部分,path即Uri的path部分。

        public int match(Uri uri):匹配Uri与addURI方法相对应,匹配成功则返回addURI方法中传入的参数code的值。

Uri uri = Uri.parse("content://cn.itcast.db.personprovider/person"); 
   ContentResolver resolver = context.getContentResolver();
   Cursor cursor = resolver.query(uri, new String[] { "address", "date",
		"type", "body" }, null, null, null);
  while (cursor.moveToNext()) {
			String address = cursor.getString(0); 
			long date = cursor.getLong(1);
			int type = cursor.getInt(2);
			String body = cursor.getString(3);
	}
	cursor.close();

ContentResolver对象的query()方法实现了对其他应用数据的查询功能,需要注意的是,这里的Uri只能提供查询操作,如果使用查询操作的Uri进行更新操作会抛异常。


猜你喜欢

转载自blog.csdn.net/qq_29477223/article/details/80950728