一个ContentProvider的Demo

来源:互联网 发布:java scanner语句用法 编辑:程序博客网 时间:2024/06/06 08:50

第一:

在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/insertprivate staticfinal 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);//updateuriMatcher.addURI(AUTHORITY, "person/update", PERSON_UPDATE_CODE);//deleteuriMatcher.addURI(AUTHORITY, "person/delete", PERSON_DELETE_CODE);//getAlluriMatcher.addURI(AUTHORITY, "person/getAll", PERSON_GETALL_CODE);}@Overridepublic int delete(Uri arg0, String arg1, String[] arg2) {// TODO Auto-generated method stubswitch (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;}@Overridepublic String getType(Uri arg0) {<span style="white-space:pre"></span>//获取数据类型  系统自己运行// TODO Auto-generated method stubswitch (uriMatcher.match(arg0)) {case PERSON_GETALL_CODE://返回多条的MIME-typereturn "vnd.android.cursor.dir/person";default:break;}return null;}@Overridepublic Uri insert(Uri arg0, ContentValues arg1) { //添加// TODO Auto-generated method stubswitch (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

0 0
原创粉丝点击