自定义ContentProvider
2016-09-13 21:39
453 查看
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);
4000
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();
}
>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);
4000
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();
}
相关文章推荐
- 用PHP语言刷OJ题
- php错误级别
- Yii2.0 增删改查
- Ubuntu16.04 PPTP Server Setting
- mac下phpize报错Cannot find autoconf. Please check your autoconf installation解决方法
- PHP生成器 (generator)和协程的实现
- 狂拽酷炫吊炸天:用 PHP 协程实现多任务协作
- ftp类库
- Thinkphp 单字母内部函数 ADSLCFI
- PHP学习笔记:万能随机字符串生成函数(已经封装好)
- PHP实现人脸识别技术
- php openssl
- 完整程序FTP上传
- php学习笔记:利用gd库生成图片,并实现随机验证码
- PHP 5.5 新特性
- LibGdx文档译读(七)InputProcessor接口
- PHP-- 三种数据库随机查询语句写法
- matplotlib 基础
- php 编码转换 乱码解决
- 17 ContentProvider