自定义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();

}

0 0
原创粉丝点击