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的监听器
- Android应用开发之ContentProvider
- Android应用开发学习笔记之ContentProvider
- Android开发之ContentProvider
- Android开发之ContentProvider
- Android应用组件之ContentProvider
- Android开发之ContentProvider初步
- Android开发之ContentProvider详解
- Android开发之ContentProvider详解
- Android四大应用构件之ContentProvider解析
- Android应用间数据共享之ContentProvider
- Android应用间数据共享之ContentProvider
- 四大应用组件之ContentProvider【Android】
- Android 四大应用组件之ContentProvider
- Android 开发之 ContentProvider 内容提供者
- Android开发之路十三-----------ContentProvider连接
- Android开发之ContentProvider的应…
- Android开发之实现自己的ContentProvider
- android开发笔记之ContentProvider使用样例一
- 第8周实验报告
- 10个强大的Javascript表单验证插件
- adb+push上载文件到SD存储卡
- CameraTrace:被盗相机失而复得
- linux内核分析之缺页中断
- Android应用开发之ContentProvider
- 10 款CSS/HTML在线表单生成器
- 用CRM命令行工具配置集群资源
- frame页面加载顺
- 设计模式之Decorator(装饰模式)
- build-essentia
- linux 7个值得关注的开发热点
- Android 中文件类型与MIME的匹配表
- Xmemcached用户指南