创建自己的内容提供器ContentProvider
来源:互联网 发布:图片扣字软件 编辑:程序博客网 时间:2024/05/01 19:54
通过新建一个类去继承ContentProvider的方式来创建一个自己的内容提供器,ContentProvider类中有六个抽象方法,其要将其全部重写。新建MyProvider类继承ContentProvider,可以看到已经规定方法:
public class MyProvider extends ContentProvider { @Override public int delete(Uri arg0, String arg1, String[] arg2) { // TODO Auto-generated method stub return 0; } @Override public String getType(Uri arg0) { // TODO Auto-generated method stub return null; } @Override public Uri insert(Uri arg0, ContentValues arg1) { // TODO Auto-generated method stub return null; } @Override public boolean onCreate() { // TODO Auto-generated method stub return false; } @Override public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3, String arg4) { // TODO Auto-generated method stub return null; } @Override public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) { // TODO Auto-generated method stub return 0; }}
我们标准的URI写法如下:
content://com.example.app.provider/table1
这就表示调用期望访问的是com.example.app这个应用的table1表中的内容,除此之外,还可以在这个内容URI之后加上一个id,
content://com.example.app.provider/table1/1
这就表示期望访问的是com.example.app这个应用中的table表中的id为1的数据。
我们可以使用通配符格式的内容URI:
1. *表示匹配任意长度的任意字符
2. #表示匹配任意长度的数字
接着,我们再借助UriMatcher这个类就可以轻松地实现匹配内容URI的功能:UriMatcher类中提供了一个addURI方法,接收三个参数,可以把权限、路径和自定义代码传进去。修改MyProvider中的代码:
public static final int TABLE1_DIR = 0; public static final int TABLE1_ITEM = 1; public static final int TABLE2_DIR = 2; public static final int TABLE2_ITEM = 3; public static UriMatcher uriMatcher; static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI("com.example.app.provider", "table1", TABLE1_DIR); uriMatcher.addURI("com.example.app.provider", "table1/#", TABLE1_ITEM); uriMatcher.addURI("com.example.app.provider", "table2", TABLE2_DIR); uriMatcher.addURI("com.example.app.provider", "table2/#", TABLE1_ITEM); }
@Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // TODO Auto-generated method stub switch (uriMatcher.match(uri)) { case TABLE1_DIR: break; case TABLE1_ITEM: break; case TABLE2_DIR: break; case TABLE2_ITEM: break; default: break; } return null; }
可以看到,在静态代码块中,我们传入了四组URI。其中TABLE1_DIR表示访问table1表中数据内容,以此类推。
实现getType方法中的逻辑:
@Override public String getType(Uri uri) { // TODO Auto-generated method stub switch (uriMatcher.match(uri)) { case TABLE1_DIR: return "vnd.android.cursor.dir/" + "vnd.com.example.app.provider.table1"; case TABLE1_ITEM: return "vnd.android.cursor.item/" + "vnd.com.example.app.provider.table1"; case TABLE2_DIR: return "vnd.android.cursor.dir/" + "vnd.com.example.app.provider.table2"; case TABLE2_ITEM: return "vnd.android.cursor.item/" + "vnd.com.example.app.provider.table2"; default: break; } return null; }
0 0
- 创建自己的内容提供器ContentProvider
- 创建自己的内容提供器
- Andriod---创建自己的内容提供器
- Android 内容提供器---创建内容提供器(实现ContentProvider的MIME类型)
- Android 内容提供器---创建内容提供器(实现ContentProvider的MIME类型)
- ContentProvider ---内容提供器
- ContentProvider内容提供器
- ContentProvider(内容提供器)
- ContentProvider 内容提供器
- android 学习笔记 创建自己的内容提供器
- 第一行代码-7.3 创建自己的内容提供器
- 22读书笔记之创建自己的内容提供器
- 访问内容提供器(ContentProvider)提供的数据
- Android 内容提供器---创建内容提供器(实现ContentProvider类)
- Android 内容提供器---创建内容提供器(实现ContentProvider类)
- Android 内容提供器 ContentProvider
- ContentProvider--------详解内容提供器
- Android之内容提供器ContentProvider的简单表示
- Cordova项目迁入记录
- 字符串匹配-KMP算法
- 邻接表的建立-两种方式(模板)
- scala类型系统: 类型约束与特定方法
- zz Java语法糖之泛型 - 综述
- 创建自己的内容提供器ContentProvider
- JavaSE自学笔记整理(五)
- ajax运用效果图
- Eclipse安装git
- 中国移动:GSM、TD-SCDMA 中国联通:GSM、WCDMA 中国电信:CDMA、CDMA2000
- springAOP
- 简单的正则用法
- 欢迎使用CSDN-markdown编辑器
- scala雾中风景: 逆变点与协变点