Android应用开发之ContentProvider

来源:互联网 发布:cassandra数据库部署 编辑:程序博客网 时间:2024/04/29 14:50

1、PersonProvider

package cn.class3g.db; import cn.class3g.service.DatabaseHelper;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri; public class PersonProvider extends ContentProvider {       private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);        private static final int PERSONS = 1;       private static final int PERSON = 2;        private DatabaseHelper dbHelper;        static {              matcher.addURI("cn.class3g.providers.personprovider", "person", PERSONS);              matcher.addURI("cn.class3g.providers.personprovider", "person/#",                            PERSON);       }        public boolean onCreate() {              dbHelper = new DatabaseHelper(this.getContext());              return true;       }        //  content://cn.itcast.provides.personprovider/person       public Uri insert(Uri uri, ContentValues values) {              SQLiteDatabase db = dbHelper.getWritableDatabase();              long rowId;               switch (matcher.match(uri)) {              case PERSONS: //向表中添加新纪录并返回其行号                     rowId = db.insert("person", "personid", values);                     return ContentUris.withAppendedId(uri, rowId);              default:                     throw new IllegalArgumentException("Unknow Uri:" + uri);              }       }        public Cursor query(Uri uri, String[] projection, String selection,                     String[] selectionArgs, String sortOrder) {              SQLiteDatabase db = dbHelper.getReadableDatabase();              switch (matcher.match(uri)) {              case PERSONS:                     return db.query("person", projection, selection, selectionArgs, null, null, sortOrder);              case PERSON:                     long personid = ContentUris.parseId(uri);                     String where = "personid="+ personid;                     if(selection!=null && !"".equals(selection)){                            where = where + " and "+ selection;                     }                     return db.query("person", projection, where, selectionArgs, null, null, sortOrder);                                  default:                     throw new IllegalArgumentException("Unknown Uri:"+ uri);              }       }        //  content://cn.itcast.provides.personprovider/person 更新表中的所有记录       //  content://cn.itcast.provides.personprovider/person/10 更新表中指定id的记录       public int update(Uri uri, ContentValues values, String selection,                     String[] selectionArgs) {              SQLiteDatabase db = dbHelper.getWritableDatabase();              int num;              switch(matcher.match(uri)){              case PERSONS: //更新指定记录                     num = db.update("person", values, selection, selectionArgs);                     break;              case PERSON:                     long personid = ContentUris.parseId(uri);                     String where = "personid=" + personid;                     if(selection != null){                            where += " and " + selection;                     }                     num = db.update("person", values, where, selectionArgs);                     break;              default:                     throw new IllegalArgumentException("Unknow Uri"+uri);              }              return num;       }        public int delete(Uri uri, String selection, String[] selectionArgs) {              SQLiteDatabase db = dbHelper.getWritableDatabase();              int num = 0;              switch (matcher.match(uri)) {              case PERSONS:                     num = db.delete("person", selection, selectionArgs);                     break;              case PERSON:                     long personid = ContentUris.parseId(uri);                     String where = "personid="+ personid;                     if(selection!=null && !"".equals(selection)){                            where = where + " and "+ selection;                     }                     num = db.delete("person", where, selectionArgs);                     break;                  default:                     throw new IllegalArgumentException("Unknown Uri:"+ uri);              }              return num;       }        public String getType(Uri uri) {              switch (matcher.match(uri)) {              case PERSONS:                     return "vnd.android.cursor.dir/person";              case PERSON:                     return "vnd.android.cursor.item/person";              default:                     throw new IllegalArgumentException("Unknown Uri:"+ uri);              }       }}


2、配置

<provider            android:authorities="cn.class3g.providers.personprovider"            android:name="PersonProvider" >        </provider>


3、建立测试工程编写测试代码

package cn.class3g.visitor; import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.test.AndroidTestCase;import android.util.Log; public class AccessContentProviderTest extends AndroidTestCase {       public void testSave() throws Throwable{       ContentResolver resolver = this.getContext().getContentResolver();       Uri insertUri = Uri.parse("content://cn.class3g.providers.personprovider/person");       ContentValues values = new ContentValues();       values.put("name", "laozhang");       values.put("age", "50");       Uri uri = resolver.insert(insertUri, values);       Log.i("TAG", uri.toString());    }       public void testQuery() throws Throwable{       ContentResolver resolver = this.getContext().getContentResolver();       Uri uri = Uri.parse("content://cn.class3g.providers.personprovider/person");             Cursor cursor = resolver.query(uri, null, null, null, "personid asc");             while(cursor.moveToNext()){           int personid = cursor.getInt(cursor.getColumnIndex("personid"));           String name = cursor.getString(cursor.getColumnIndex("name"));                     Log.i("TAG", "personid="+ personid + ",name="+ name);       }       cursor.close();    }       public void testUpdate() throws Throwable{       ContentResolver contentResolver = this.getContext().getContentResolver();       Uri updateUri = Uri.parse("content://cn.class3g.providers.personprovider/person/5");       ContentValues values = new ContentValues();       values.put("name", "蒋介石");       contentResolver.update(updateUri, values, null, null);    }    public void testDelete() throws Throwable{       ContentResolver contentResolver = this.getContext().getContentResolver();       Uri uri = Uri.parse("content://cn.class3g.providers.personprovider/person/5");       contentResolver.delete(uri, null, null);    }  }

 

4、测试(注意需要先将provider拥有者工程部署到设备上)

5、ContentProvider的监听器

原创粉丝点击