您的位置:首页 > 编程语言 > PHP开发

一个ContentProvider的Demo

2015-06-02 18:29 766 查看
第一:在AndroidMainfest.xml 中 的<application>标签中进行进行配置
<pre name="code" class="html"><span style="white-space:pre">	</span><provider 
<span style="white-space:pre">	</span>    android:name="content.PersonContent"
android:authorities="com.mirs.demotoone.content.PersonContent"
android:exported="true"
></provider>
创建一个类  继承于 Contentprovider
public class PersonContent extends ContentProvider{
//content://com.mirs.demotoone.content.PersonContent/person/insert
private static	final String AUTHORITY="com.mirs.demotoone.content.PersonContent"; // 这里我是写成和xml中的一样
private DBMaanger dbManager;

private static final int PERSON_INSERT_CODE = 0;  //操作码

private static final int PERSON_UPDATE_CODE = 1;

private static final int PERSON_DELETE_CODE = 2;

private static final int PERSON_GETALL_CODE = 3;

private static 	UriMatcher uriMatcher;
static{
uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
/**
* 添加一些分机号
* */
//insert
uriMatcher.addURI(AUTHORITY, "person/insert", PERSON_INSERT_CODE);
//update
uriMatcher.addURI(AUTHORITY, "person/update", PERSON_UPDATE_CODE);
//delete
uriMatcher.addURI(AUTHORITY, "person/delete", PERSON_DELETE_CODE);
//getAll
uriMatcher.addURI(AUTHORITY, "person/getAll", PERSON_GETALL_CODE);
}

@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
// TODO Auto-generated method stub
switch (uriMatcher.match(arg0)) {      //删除
case PERSON_DELETE_CODE:
SQLiteDatabase db=dbManager.getWritableDatabase();
if(db.isOpen()){
int id=db.delete("perosn",arg1, arg2);
db.close();
return 	id;
}
break;

default:
throw new IllegalArgumentException("delete"+arg0);

}
return 0;
}

@Override
public String getType(Uri arg0) {<span style="white-space:pre">		</span>//获取数据类型  系统自己运行
// TODO Auto-generated method stub
switch (uriMatcher.match(arg0)) {
case PERSON_GETALL_CODE://	返回多条的MIME-type
return "vnd.android.cursor.dir/person";
default:
break;
}
return null;
}

@Override
public Uri insert(Uri arg0, ContentValues arg1) { //添加
// TODO Auto-generated method stub
switch (uriMatcher.match(arg0)) {
case PERSON_INSERT_CODE:
SQLiteDatabase db=dbManager.getWritableDatabase();
if(db.isOpen()){
long id=db.insert("perosn", null, arg1);
db.close();
return 	ContentUris.withAppendedId(arg0, id);
}
break;

default:
throw new IllegalArgumentException("inserto"+arg0);

}
return null;
}
<span style="white-space:pre">	</span>/**
<span style="white-space:pre">		</span>Oncreate是系统自动运行的
*/@Overridepublic boolean onCreate() {// TODO Auto-generated method stub<span style="white-space:pre">	</span>dbManager=new DBMaanger(getContext());return false;}@Overridepublic Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,String arg4) {// TODO Auto-generated method stubswitch (uriMatcher.match(arg0)) {case PERSON_GETALL_CODE:SQLiteDatabase db=dbManager.getWritableDatabase();if(db.isOpen()){
				Cursor cursor=db.query("person", arg1, arg2, arg3, null, null, arg4);return 	cursor;}break;default:throw new IllegalArgumentException("query"+arg0);}return null;}@Overridepublic int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {<span style="white-space:pre">		</span>//更新// TODO Auto-generated method stubswitch (uriMatcher.match(arg0)) {case PERSON_UPDATE_CODE:SQLiteDatabase db=dbManager.getWritableDatabase();if(db.isOpen()){int id=db.update("person", arg1, arg2, arg3);db.close();return id;}break;default:throw new IllegalArgumentException("update"+arg0);}return 0;}}
创建一个新的Android项目 在一个Test类中
public void testInsert(){
<span style="white-space:pre">		</span>//创建一个uri  调用静态方法Uri uri=Uri.parse("content://com.mirs.demotoone.content.PersonContent/person/insert");ContentResolver resolver = getContext().getContentResolver();ContentValues values=new ContentValues();values.put("name", "凤姐");values.put("age", 18);uri=resolver.insert(uri, values);long id=ContentUris.parseId(uri);Log.i(TGA, "添加到"+id);}
然后 run Ok 成功在Log中看到数据注意在xml中的
android:exported="true"
不然会出现 java.lang.SecurityException
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: