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函数确实是由该进程的主线程执行) ...
随机推荐
- SourceTree免注册并连码云
1 在C:\Users\用户\AppData\Local\Atlassian\SourceTree目录下新建 accounts.json 其中AppData是隐藏文件夹 2 输入 [ { " ...
- 反向代理服务器(Reverse Proxy)
反向代理服务器(Reverse Proxy) 普通代理服务器是帮助内部网络的计算机访问外部网络.通常,代理服务器同时连接内网和外网.首先内网的计算机需要设置代理服务器地址和端口,然后将HTTP请求 ...
- c实现的trim函数
功能:去掉字符串首尾的空格,换行符等空白. 代码: #include <string.h> #include <stdio.h> #include <ctype.h> ...
- Centos7源码安装MySQL5.7
a.连接数据库报111 从一台linux远程连接另一台linux上的MySQL,出现ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx. ...
- SQL-基础学习3--通配符:LIKE,%,(_); 拼接:+,||,concat;
第六课 用通配符进行过滤 6.1 LIKE操作符 通配符本身实际上是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符.为在搜索子句中使用通配符,必须使用LIKE操作符.LIKE指示DB ...
- scheme语言编写执行
scheme是lisp的一种 编辑器能够用emacs.网上有非常多教导怎样编写的 (begin (display "hello") (newline)) 编写完以.scm保存,这里 ...
- odoo小数精确度
python round() 函数 Python用于四舍五入的内建函数round() ,它的定义为 意思是, 将 小数部分保留到 ndigits 指定的 小数位,也就是 精度保持到 ndigi ...
- Django开发微信公众平台
处理微信发来的信息,实际上就是处理xml的过程.先写xml工具类 # -*- coding:utf-8 -*- from xml.dom import minidom from Web.model.W ...
- ubuntu环境准备
一. 桌面方面看起来比较不爽,12的版本用起更不习惯,决定改成命令行登陆 a. vi /ect/default/grub 文件 b. 修改成第二个红框的情况 c. 执行update-grub命令 d ...
- Node.js 数据存储方式的选择
如何为你的 Node.js 应用挑选数据库 Node.js 应用一般有三种方式保存数据. 不使用任何数据库管理系统(DBMS),把数据保存在内存里或直接使用文件系统. 使用关系数据库.例如 MySQL ...