contentprovider 实例
2024-09-03 23:24:39
Provider端
public class PersonProvider extends ContentProvider { //用来存放所有合法的Uri的容器 private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); //保存一些合法的uri // content://com.atguigu.l09_provider.personprovider/person 不根据id操作 // content://com.atguigu.l09_provider.personprovider/person/3 根据id操作 static { matcher.addURI("com.atguigu.l09_provider.personprovider", "/person", 1); matcher.addURI("com.atguigu.l09_provider.personprovider", "/person/#", 2); //#匹配任意数字 } private DBHelper dbHelper; public PersonProvider() { Log.e("TAG", "PersonProvider()"); } @Override public boolean onCreate() { Log.e("TAG", "PersonProvider onCreate()"); dbHelper = new DBHelper(getContext()); return false; } /** * content://com.atguigu.l09_provider.personprovider/person 不根据id查询 * content://com.atguigu.l09_provider.personprovider/person/3 根据id查询 */ @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Log.e("TAG", "PersonProvider query()"); //得到连接对象 SQLiteDatabase database = dbHelper.getReadableDatabase(); //1.匹配uri, 返回code int code = matcher.match(uri); //如果合法, 进行查询 if(code==1) {//不根据id查询 Cursor cursor = database.query("person", projection, selection, selectionArgs, null, null, null); return cursor; } else if(code==2) {//根据id查询 //得到id long id = ContentUris.parseId(uri); //查询 Cursor cursor = database.query("person", projection, "_id=?", new String[]{id+""}, null, null, null); return cursor; } else {//如果不合法, 抛出异常 throw new RuntimeException("查询的uri不合法"); } } /** * content://com.atguigu.l09_provider.personprovider/person 插入 * content://com.atguigu.l09_provider.personprovider/person/3 根据id插入(没有) */ @Override public Uri insert(Uri uri, ContentValues values) { Log.e("TAG", "PersonProvider insert()"); //得到连接对象 SQLiteDatabase database = dbHelper.getReadableDatabase(); //匹配uri, 返回code int code = matcher.match(uri); //如果合法, 进行插入 if(code==1) { long id = database.insert("person", null, values); //将id添加到uri中 uri = ContentUris.withAppendedId(uri, id); database.close(); return uri; } else { //如果不合法, 抛出异常 database.close(); throw new RuntimeException("插入的uri不合法"); } } /** * content://com.atguigu.l09_provider.personprovider/person 不根据id删除 * content://com.atguigu.l09_provider.personprovider/person/3 根据id删除 */ @Override public int delete(Uri uri, String selection, String[] selectionArgs) { Log.e("TAG", "PersonProvider delete()"); //得到连接对象 SQLiteDatabase database = dbHelper.getReadableDatabase(); //匹配uri, 返回code int code = matcher.match(uri); int deleteCount = -1; //如果合法, 进行删除 if(code==1) { deleteCount = database.delete("person", selection, selectionArgs); } else if(code==2) { long id = ContentUris.parseId(uri); deleteCount = database.delete("person", "_id="+id, null); } else { //如果不合法, 抛出异常 database.close(); throw new RuntimeException("删除的uri不合法"); } database.close(); return deleteCount; } /** * content://com.atguigu.l09_provider.personprovider/person 不根据id更新 * content://com.atguigu.l09_provider.personprovider/person/3 根据id更新 */ @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.e("TAG", "PersonProvider update()"); //得到连接对象 SQLiteDatabase database = dbHelper.getReadableDatabase(); //匹配uri, 返回code int code = matcher.match(uri); int updateCount = -1; //如果合法, 进行更新 if(code==1) { updateCount = database.update("person", values, selection, selectionArgs); } else if(code==2) { long id = ContentUris.parseId(uri); updateCount = database.update("person", values, "_id="+id, null); } else { //如果不合法, 抛出异常 database.close(); throw new RuntimeException("更新的uri不合法"); } database.close(); return updateCount; } @Override public String getType(Uri uri) { // TODO Auto-generated method stub return null; } }
<provider android:name="com.atguigu.l09_provider.PersonProvider" android:authorities="com.atguigu.l09_provider.personprovider" android:exported="true"/> <!-- exported : 是否可以让其它应用访问 -->
Resolver端
/* * 通过ContentResolver调用ContentProvider插入一条记录 */ public void insert(View v) { //1. 得到ContentResolver对象 ContentResolver resolver = getContentResolver(); //2. 调用其insert Uri uri = Uri.parse("content://com.atguigu.l09_provider.personprovider/person"); //uri = Uri.parse("content://com.atguigu.l09_provider.personprovider/person/3"); ContentValues values = new ContentValues(); values.put("name", "JACK"); uri = resolver.insert(uri, values); Toast.makeText(this, uri.toString(), 1).show(); } /* * 通过ContentResolver调用ContentProvider更新一条记录 */ public void update(View v) { //1. 得到ContentResolver对象 ContentResolver resolver = getContentResolver(); //2. 执行update Uri uri = Uri.parse("content://com.atguigu.l09_provider.personprovider/person/2"); ContentValues values = new ContentValues(); values.put("name", "JACK2"); int updateCount = resolver.update(uri, values, null, null); Toast.makeText(this, "updateCount="+updateCount, 1).show(); } /* * 通过ContentResolver调用ContentProvider删除一条记录 */ public void delete(View v) { //1. 得到ContentResolver对象 ContentResolver resolver = getContentResolver(); //2. 执行delete Uri uri = Uri.parse("content://com.atguigu.l09_provider.personprovider/person/2"); int deleteCount = resolver.delete(uri, null, null); Toast.makeText(this, "deleteCount="+deleteCount, 1).show(); } /* * 通过ContentResolver调用ContentProvider查询所有记录 */ public void query(View v) { //1. 得到ContentResolver对象 ContentResolver resolver = getContentResolver(); //2. 调用其query, 得到cursor Uri uri = Uri.parse("content://com.atguigu.l09_provider.personprovider/person/1"); uri = Uri.parse("content://com.atguigu.l09_provider.personprovider/person"); Cursor cusor = resolver.query(uri, null, null, null, null); //3. 取出cursor中的数据, 并显示 while(cusor.moveToNext()) { int id = cusor.getInt(0); String name = cusor.getString(1); Toast.makeText(this, id+" : "+name, 1).show(); } cusor.close(); }
最新文章
- 环境搭建系列-系统安装之centos 6.5安装与配置
- Tomcat笔记
- 新浪微博客户端(36)-自定义带placeholder的TextView
- Nginx日志常用分析命令汇总 (转)
- python装饰器示例
- js中object类型模拟java中的map
- jar包与lib包的区别
- linux通过文件查找依赖关系
- [译]Selenium Python文档:六、页面对象
- 关于SESSION失效和关闭浏览器问题
- 201521123045 <;java程序设计>;第11周学习总结
- .NET 构造Class返回多个json值
- HDU 1248 寒冰王座(完全背包裸题)
- 关于git post-receive 钩子
- Binary Tree Zigzag Level Order Traversal(z字形打印二叉树)
- javascript之location详解
- Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)
- Java并发编程:volatile关键字
- js实现的玫瑰花
- Java -- POI -- 随笔汇总
热门文章
- MySQL通用编程
- Network | Public-key cryptography
- SQLite的sqlite_sequence表
- SSL剥离工具sslstrip
- Leetcode 数组问题3:旋转数组
- Ubuntu 16.04安装Wine版的迅雷+QQ(完美方案,终极解决方法)
- 修改ViewPager调用setCurrentItem时,滑屏的速度 ,解决滑动之间切换动画难看
- SilverLight: 数据绑定(1)-绑定到数据对象
- 从零開始开发Android版2048 (二)获取手势信息
- 在jsp中拿到applicationContext