contentprovider 实例
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(); }
contentprovider 实例的更多相关文章
- (Android) ContentProvider 实例
ContentProvider 用于应用程序(Android Application)之间传递数据,包括Insert, update, delete, query. 下面的例子是在两个应用之间传递数据 ...
- 【Android】19.3 ContentProvider及安卓进一步封装后的相关类
分类:C#.Android.VS2015: 创建日期:2016-03-08 一.简介 ContentProvider:内容提供程序. Android的ContentProvider与.NET框架的EF ...
- Android 进阶11:进程通信之 ContentProvider 内容提供者
学习启舰大神,每篇文章写一句励志的话,与大家共勉. When you are content to be simply yourself and don't compare or compete, e ...
- Android面试收集录3 ContentProvider详解
1.ContentProvider简单介绍 1.1.定义 ContentProvider,即内容提供者属于Android的四大组件之一. 1.2.作用 进程间进行数据交互&共享,即跨进程通信. ...
- Android ContentProvider 启动分析
对于 ContentProvider 还不是很熟悉的同学,可以阅读上一篇 Android ContentProvider 基本原理和使用详解.本文主要是对 contentProvider 的源码进行分 ...
- Android开发-API指南-创建 Content Provider
Creating a Content Provider 英文原文:http://developer.android.com/guide/topics/providers/content-provide ...
- 2.SDL规范文档
01.安全设计Checklist 输入验证 校验跨信任边界传递的不可信数据(策略检查数据合法性,含白名单机制等)格式化字符串时,依然要检验用户输入的合法性,避免可造成系统信息泄露或者拒绝服务 禁止向J ...
- Android 技能图谱学习路线
这里是在网上找到的一片Android学习路线,希望记录下来供以后学习 1Java 基础 Java Object类方法 HashMap原理,Hash冲突,并发集合,线程安全集合及实现原理 HashMap ...
- ActivityThread 源码分析
ActivityThread是Android Framework中一个非常重要的类,它代表一个应用进程的主线程(对于应用进程来说,ActivityThread的main函数确实是由该进程的主线程执行) ...
随机推荐
- python 中各种数据类型的排序问题
list #按照list的第二键值排序 disP2P = [[1,2,3],[2,3,4],[4,5,6]] disP2P = sorted(disP2P,key = lambda x:x[2]) s ...
- Codeforces635C XOR Equation【数学】
题目链接: http://codeforces.com/contest/635/problem/C 题意: 给定两个数的和s及异或x,求两个数的可能情况. 分析: 我们有公式a+b=a& b∗ ...
- Codeforces 620E New Year Tree(线段树+位运算)
题目链接 New Year Tree 考虑到$ck <= 60$,那么用位运算统计颜色种数 对于每个点,重新标号并算出他对应的进和出的时间,然后区间更新+查询. 用线段树来维护. #includ ...
- 浅谈APP的分享功能,有时候社交裂变形式比内容更“重要”
回顾2018年的移动互联网,“社交裂变”“下沉”等成为年度关键词.一方面我们可以看到社交裂变助推用户增长,另一方面我们也看到了以拼多多.趣头条为代表的互联网企业对于社交裂变模式表现出的空前关注度.作为 ...
- k8s入门简介
1.docker的三种编排工具 Docker的第一类编排工具: a.docker compose(docker原生):只能对一个主机上的容器进行编排,无法编排多个主机上的容器; b.docker sw ...
- CDOJ 879 摩天轮 dp+斜率优化
原题链接:http://www.acm.uestc.edu.cn/#/problem/show/879 题意: 中文题 题解: 这是一道斜率dp的题. 先把$a$数组排个序. 令$dp[i][j]$表 ...
- JFinal学习 & Gradle配置续 & Tomcat配置
接上一篇对Gradle的学习,再用JFinal项目再建一个. 参考了这篇文章:https://my.oschina.net/u/1010578/blog/390094 但是其中没有代码,所以看了这篇 ...
- elasticsearch 最佳实践
创建索引 无mapping 创建索引名称为index的索引 curl -XPUT http://localhost:9200/book 有mapping 如果需要定义每个类型的结构映射,创建type名 ...
- vue2 + typescript2 项目开发(环境配置)
Vue 引入 TypeScript vue init airyland/vux2 projectName 增加开发包的依赖 npm install typescript ts-loader --sav ...
- Foundation框架 - NSException类
NSException类 WBStudentManager.h #import <Foundation/Foundation.h> NSString* const NameInvalidE ...