自定义ContentProvider
来源:互联网 发布:html5网页源码模板 编辑:程序博客网 时间:2024/06/06 04:19
1,创建一个类 继承 contentProvider
>2,实现里面的方法 oncreate() query() insert() update(),delete() getType()
>3,在清单文件进行注册> 注册provider android:name="包名+类名">
android:authorities="" 包名+类名 单词全部小写 权限 contentprovider标识(清单文件 contentProvider中 客户端)必须一样 保证不重
android:exported="true" 其他程序可以使用'
ContentProvider:将私有数据共享出去
4.Uri:统一资源标识符 相当于路径 (每一个程序有唯一的Uri(增删改查)操作自己的方法)
uriMatcher.addURI("com.example.day17_word.provider.myprovider", "worddb", 1);
uriMatcher.addURI("com.example.day17_word.provider.myprovider", "newworddb", 2);
uriMatcher.addURI("com.example.day17_word.provider.myprovider", "worddb/*", 1);
uriMatcher.addURI("com.example.day17_word.provider.myprovider", "worddb_id/#", 1);
uriMatcher.addURI("com.example.day17_word.provider.myprovider", "worddb_zh/*", 1);
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
helper=new MyDBHelper(getContext());
db=helper.getReadableDatabase();
return false;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
Cursor cursor =null;
switch (uriMatcher.match(uri)) {
case 1:
//tb_words表中所有数据
cursor = db.query("worddb", projection, selection, selectionArgs, null, null, sortOrder);
break;
case 2:
//tb_newwords表中所有数据
cursor = db.query("newworddb", projection, selection, selectionArgs, null, null, sortOrder);
break;
case 3:
//tb_words表中符合条件 word
String data = uri.getLastPathSegment();//获取Uri最后的参数
cursor = db.query("worddb", projection, "eng like ?", new String[]{data+"%"}, null, null, sortOrder);
break;
case 4:
//tb_words表中符合条件 _id
String data1 = uri.getLastPathSegment();//获取Uri最后的参数
cursor = db.query("worddb", projection, "_id = ?", new String[]{data1+""}, null, null, sortOrder);
break;
case 5:
//tb_words表中符合条件 detail
String data2 = uri.getLastPathSegment();//获取Uri最后的参数
cursor = db.query("worddb", projection, "china like ?", new String[]{data2+"%"}, null, null, sortOrder);
break;
default:
break;
}
return cursor;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
switch (uriMatcher.match(uri)) {
case 1:
db.insert("worddb", null, values);
break;
case 2:
db.insert("newworddb", null, values);
break;
default:
break;
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
int num=0;
switch (uriMatcher.match(uri)) {
case 1:
num=db.delete("worddb",selection,selectionArgs);
break;
case 2:
num=db.delete("newworddb",selection,selectionArgs);
break;
default:
break;
}
return num;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
int num=0;
switch (uriMatcher.match(uri)) {
case 1:
num=db.update("worddb", values, selection, selectionArgs);
break;
case 2:
num=db.update("worddb", values, selection, selectionArgs);
break;
default:
break;
}
return num;
}
5.ContentResolver:内容解析器 通过Uri 访问ContentProvider共享出来的数据 (联系人)
ContentResolver resolver = getContentResolver();
Uri uriWords = Uri.parse("content://com.example.day17_word.provider.myprovider/worddb");
Uri uriWordsId = Uri.parse("content://com.example.day17_word.provider.myprovider/worddb_id");
Uri uriWordsZh = Uri.parse("content://com.example.day17_word.provider.myprovider/worddb_zh");
Cursor cursor = null;
if(TextUtils.isEmpty(strdata)){//什么也没输入 直接查询所有
cursor = resolver.query(uriWords, null, null, null, null);
}else{
if(isNumber(strdata)){//输入的数据 是否是数值
uriWordsId = ContentUris.withAppendedId(uriWordsId, Long.parseLong(strdata));
cursor = resolver.query(uriWordsId, null, null, null, null);
}else{
if(isChina(strdata)){//是否是汉字
uriWordsZh = Uri.withAppendedPath(uriWordsZh, strdata);
cursor = resolver.query(uriWordsZh, null, null, null, null);
}else{
uriWords = Uri.withAppendedPath(uriWords, strdata);
cursor = resolver.query(uriWords, null, null, null, null);
}
}
}
SimpleCursorAdapter adapter = new SimpleCursorAdapter
(MainActivity.this, R.layout.item, cursor,
new String[]{"eng","china"},
new int[]{R.id.tv_word,R.id.tv_china}, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
lv.setAdapter(adapter);
}
//判断是否是数字
public boolean isNumber(String data){
Pattern pattern = Pattern.compile("[0-9]+");
return pattern.matcher(data).matches();
}
//判断是否是中文
public boolean isChina(String data){
Pattern pattern = Pattern.compile("[\u4e00-\u9fa5]+");
return pattern.matcher(data).matches();
}
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义contentprovider
- 自定义ContentProvider
- 自定义contentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 自定义ContentProvider
- 常量和存储属性
- LibGdx文档译读(十一) Screen接口
- bzoj 2190: [SDOI2008]仪仗队 欧拉函数
- TextView常用属性
- 双端队列(单调队列)POJ 2823 定长区间最小值(RMQ也可以)
- 自定义ContentProvider
- git(分布式版本控制系统)——(一)
- Mongodb 监控安装配置
- 企业库
- 百度笔试编程题:最大子阵和(C++)
- 一道网络习题
- Oracle 12c Study之-- 分区表新特性
- C++多态实现原理详解
- 如何成为一名黑客(网络安全从业者)——计算机基础知识篇