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函数确实是由该进程的主线程执行) ...
随机推荐
- LeetCode OJ——Minimum Depth of Binary Tree
http://oj.leetcode.com/problems/minimum-depth-of-binary-tree/ 贡献了一次runtime error,因为如果输入为{}即空的时候,出现了c ...
- django使用logging记录日志
django使用logging记录日志,我没有用这方式去记录日志,主要还是项目小的原因吧, 有机会遇见大项目的话可以回头研究. 配置setting.py配置文件 import logging impo ...
- [Bzoj4942][Noi2017]整数(线段树)
4942: [Noi2017]整数 Time Limit: 50 Sec Memory Limit: 512 MBSubmit: 363 Solved: 237[Submit][Status][D ...
- CodeChef - RIN Course Selection
Read problems statements in Mandarin Chineseand Russian. Rin is attending a university. She has M se ...
- 1.搭建maven,eclipse创建maven项目
1.下载maven包,下载地址为:http://maven.apache.org/download.cgi 2.解压zip包 3.eclipse 引入maven: window-Preferences ...
- Java创建和解析Json数据方法(四)——json-lib包的使用
(四)json-lib包的使用 既然json-lib包比org.json包重量级,那么json-lib包肯定有很多org.json包没有的类和方法,这篇笔记简单记录json-lib包中 ...
- IntelliJ IDEA出现Search for无法退出的问题
说明: 1.这个不是安装了Vim导致的 解决方式: 1.可能是在不正确的系统时间启动的IDEA,然后启动完成后又把时间改成正确的. 2.直接方式是重启. 3.间接方式是修改完时间后再重启一下全部IDE ...
- Java中没有C#的out关键字,但可以通过数组实现类似的效果
其实传递的就是数组的指针,里面的每一项的值还是那块内存,所以能直接操作里面的值.如果单纯传指定的值,那么里面操作的就是新的一块内存块. 用数组实现的效果如下: class B{ String cnt= ...
- EventBus3.0使用笔记.md
事件总线这个其实没什么好说的,除了已经ondestroy的fragment或者activity不能接受外,只要定义了的都能接收消息 代码如下,需要注意的一点就是接收的监听事件必须用public修饰并且 ...
- 通过HTML5 FileReader实现上传图片预览功能
原文:http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/201706224590.html 在上传图片到服务器之前,我们希望可以预览一下要上传的图片. ...