美文网首页
ContentProvider和Uri

ContentProvider和Uri

作者: 沈杰3 | 来源:发表于2017-08-24 10:50 被阅读0次

    1. url和uri:

    url,uri,urn
    • URI:Uniform Resource Identifier,统一资源标识符;
    • URL:Uniform Resource Locator,统一资源定位符;
    • URN:Uniform Resource Name,统一资源名称。

    首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。

    2. ContentProvider

    • ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。

    详细说明:@ContentProvider和URI

    重点:

    • Uri组成,
    • 使用ContentResolver操作ContentProvider中的数据,
    
    ContentResolver resolver =  getContentResolver();
    Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person");
    //添加一条记录
    ContentValues values = new ContentValues();
    values.put("name", "linjiqin");
    values.put("age", 25);
    resolver.insert(uri, values);  
    //获取person表中所有记录
    Cursor cursor = resolver.query(uri, null, null, null, "personid desc");
    while(cursor.moveToNext()){
       Log.i("ContentTest", "personid="+ cursor.getInt(0)+ ",name="+ cursor.getString(1));
    }
    //把id为1的记录的name字段值更改新为zhangsan
    ContentValues updateValues = new ContentValues();
    updateValues.put("name", "zhangsan");
    Uri updateIdUri = ContentUris.withAppendedId(uri, 2);
    resolver.update(updateIdUri, updateValues, null, null);
    //删除id为2的记录
    Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);
    resolver.delete(deleteIdUri, null, null);
    
    
    • 监听ContentProvider中数据的变化ContentObserver:
    
    public class PersonContentProvider extends ContentProvider {
       public Uri insert(Uri uri, ContentValues values) {
          db.insert("person", "personid", values);
          getContext().getContentResolver().notifyChange(uri, null);//通知
       }
    }
    
    
    //注册
    getContentResolver().registerContentObserver(Uri.parse("content://com.ljq.providers.personprovider/person"),true, new PersonObserver(new Handler()));
    
    public class PersonObserver extends ContentObserver{
       public PersonObserver(Handler handler) {
          super(handler);
       }
       public void onChange(boolean selfChange) {
          //此处可以进行相应的业务处理
       }
    }
    
    

    相关文章

      网友评论

          本文标题:ContentProvider和Uri

          本文链接:https://www.haomeiwen.com/subject/jabsdxtx.html