Android之ContentResolver与ContentProvider(2)

Java代码

switch (sUriMatcher.match(uri))   

switch (sUriMatcher.match(uri))
       来分步操作.
      
     3. 定义MIME类型,
      覆盖getType方法:主要是根据uri来返回Provider的MIME类型
    

Java代码

publicstaticfinal String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.shguo.sms";    ublic staticfinal String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.shguo.sms";  

public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.shguo.sms"; public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.shguo.sms";
      getType()为:
     

Java代码

switch (sUriMatcher.match(uri)) {            case SMS_DIR:                return   CONTENT_TYPE;            case SMS_ITEM:                return CONTENT_ITEM_TYPE;            default:                thrownew IllegalArgumentException("Unknown URI " + uri);         }  

switch (sUriMatcher.match(uri)) { case SMS_DIR: return CONTENT_TYPE; case SMS_ITEM: return CONTENT_ITEM_TYPE; default: throw new IllegalArgumentException("Unknown URI " + uri); }
    
     4. 实现query, insert, delete, update四个操作。
       具体的实现可以用sqlite, file等。并根据uri分情况操作。
       a. query时如果是item加查询条件id.
          where = "_ID=" + uri.getPathSegments().get(1)   + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : "";
          最后要加上
         cursor.setNotificationUri(getContext().getContentResolver(), uri);
       
       b. insert时要求uri只能是dir. 成功之后返回一个加id的uri.
         

Java代码

Uri insertUri = ContentUris.withAppendedId(CONTENT_URI, rowId);  

Uri insertUri = ContentUris.withAppendedId(CONTENT_URI, rowId);
       c. update、delete与query差不多。
         

Java代码

//注意通知注册uri的观察者。    getContext().getContentResolver().notifyChange(uri, null);  

//注意通知注册uri的观察者。 getContext().getContentResolver().notifyChange(uri, null);
                 
     5. 在AndroidManifest.xml中定义
        provider元素,主要属性有:
      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwsfwx.html