ContentProvider学习
1.创建类继承ContentProvider类,并实现增、删、改、查功能。
public static final String AUTHORITY = "com.diysoul.listshowdemo.providers.PersonContentProvider";
public static final int INSERT_CODE = 0;
public static final int DELETE_CODE = 1;
public static final int UPDATE_CODE = 2;
public static final int QUARY_CODE = 3;
public static final int QUARY_BY_ID_CODE = 4;
public static final String INSERT = "insert";
public static final String UPDATE = "update";
public static final String DELETE = "delete";
public static final String QUERY = "query";
/*
* 根据_id查询 #为通配符,表示一个数字 *为通配符,表示任意一个字符串
*/
public static final String QUERY_BY_ID = "query/#";
private PersonSqliteHelper mySqlHelper;
static UriMatcher uriMatcher;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(AUTHORITY, INSERT, INSERT_CODE);
uriMatcher.addURI(AUTHORITY, UPDATE, UPDATE_CODE);
uriMatcher.addURI(AUTHORITY, DELETE, DELETE_CODE);
uriMatcher.addURI(AUTHORITY, QUERY, QUARY_CODE);
uriMatcher.addURI(AUTHORITY, QUERY_BY_ID, QUARY_BY_ID_CODE);
}
@Override
public boolean onCreate() {
mySqlHelper = new PersonSqliteHelper(this.getContext());
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
switch (uriMatcher.match(uri)) {
case QUARY_CODE: {
SQLiteDatabase db = mySqlHelper.getReadableDatabase();
if (db.isOpen()) {
Cursor cursor = db.query("persons", projection, selection,
selectionArgs, null, null, sortOrder);
return cursor;
}
}
break;
case QUARY_BY_ID_CODE: {
SQLiteDatabase db = mySqlHelper.getReadableDatabase();
if (db.isOpen()) {
long id = ContentUris.parseId(uri);
Cursor cursor = db.query("persons", projection, "_id = ?",
new String[] { String.valueOf(id) }, null, null,
sortOrder);
return cursor;
}
}
break;
default:
throw new IllegalArgumentException("cannot match uri:" + uri);
}
return null;
}
@Override
public String getType(Uri uri) {
switch(uriMatcher.match(uri)) {
case QUARY_BY_ID_CODE:
return "vnd.android.cursor.item/persons";
case QUARY_CODE:
return "vnd.android.cursor.dir/persons";
default:
break;
}
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
switch (uriMatcher.match(uri)) {
case INSERT_CODE:
SQLiteDatabase db = mySqlHelper.getReadableDatabase();
if (db.isOpen()) {
long id = db.insert(PersonSqliteHelper.PERSON_TABLE, null,
values);
db.close();
return ContentUris.withAppendedId(uri, id);
}
break;
default:
throw new IllegalArgumentException("cannot match uri:" + uri);
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
switch (uriMatcher.match(uri)) {
case DELETE_CODE:
SQLiteDatabase db = mySqlHelper.getReadableDatabase();
if (db.isOpen()) {
int count = db.delete(PersonSqliteHelper.PERSON_TABLE,
selection, selectionArgs);
db.close();
return count;
}
break;
default:
throw new IllegalArgumentException("cannot match uri:" + uri);
}
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
switch (uriMatcher.match(uri)) {
case UPDATE_CODE:
SQLiteDatabase db = mySqlHelper.getReadableDatabase();
if (db.isOpen()) {
int count = db.update(PersonSqliteHelper.PERSON_TABLE, values,
selection, selectionArgs);
db.close();
return count;
}
break;
default:
throw new IllegalArgumentException("cannot match uri:" + uri);
}
return 0;
}
2.在AndroidManifest.xml中进行配置,在application根节点下增加
<provider
android:name="com.diysoul.listshowdemo.providers.PersonContentProvider"
android:authorities="com.diysoul.listshowdemo.providers.PersonContentProvider"
android:exported="true" >
</provider>
3.创建应用程序访问功能
public void runQuery() {
Log.v(TAG, "[runQuery]in");
Uri uri = Uri.parse("content://com.diysoul.listshowdemo.providers.PersonContentProvider/query");
ContentResolver resolver = this.getContext().getContentResolver();
Log.v(TAG, "[runQuery]call query");
Cursor cursor = resolver.query(uri, new String[]{"_id", "name", "tel"}, null, null, null);
Log.v(TAG, "[runQuery]cursor=" + cursor);
if(cursor != null && cursor.getCount() > 0) {
while(cursor.moveToNext()) {
int id = cursor.getInt(0);
String name = cursor.getString(1);
String tel = cursor.getString(2);
Log.v(TAG, "id=" + id + ",name=" + name + ",tel=" + tel);
}
}
}
4.监听数据改变
ContentObserver smsObserver = new ContentObserver(msmHandler) {
@Override
public void onChange(boolean selfChange) {
Log.v(TAG, "[onChange]in selfChange=" + selfChange);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
Log.v(TAG, "[onChange]in selfChange=" + selfChange + ", uri=" + uri);
//重新从查询等操作,以改变保存的数据
readSms();
//通知事件适配器数据改变,此时会自动刷新适配器关联 的ListView
smsListAdapter.notifyDataSetChanged();
}
};
getContentResolver().registerContentObserver(Uri.parse(SMS_CONTENT), true, smsObserver);
ContentProvider学习的更多相关文章
- android ContentProvider学习
1.ContentProvider提供位存储或获取数据提供了统一的接口. 2.使用ContentProvider可以在不同的应用程序之间共享数据. 3.Android为常见的一些数据提供了Conten ...
- android四大组件之ContentProvider(二)
ContentProvider学习笔记 上一章节我们编写了自定义的一个StudentProvider,他提供了两种供外界访问数据的方式,content://come.demo.sqlite.stude ...
- android四大组件之ContentProvider(一)
ContentProvider学习笔记 1. ContentProvider基本概念 ContentProvider向我们提供了我们在应用程序之间共享数据的一种机制,虽然采用文件和SharedPref ...
- Android ContentProvider 简单学习
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.以前我们学习过文件的操作模式,通过指定文件的操作模式为Context.MODE_WORL ...
- Android 学习笔记之ContentProvider实现数据共享....
PS:最近听老师说打算让我参与企业的app制作,让我加快学习的进度...好吧,貌似下周还有考试...貌似实验室这个app也要做...暂时不管了...那就只能加快进度了,感觉略微的有点激动和紧张,总算是 ...
- Android(java)学习笔记245:ContentProvider使用(银行数据库创建和增删改查的案例)
1. Android的四大组件: (1)Activity 用户交互的UI界面 (2)Service 后台运行的服务 (3)BroadcastReceiver 广播接收者 (4)ContentPro ...
- 一、Android四大框架之ContentProvider的学习与运用,实现SQLite的增删改查。
本文系原创博客,文中不妥烦请指出,如需转载摘要请注明出处! ContentProvider的学习与运用 Alpha Dog 2016-04-13 10:27:06 首先,项目的地址:https:// ...
- Android学习记录(3)—Android中ContentProvider的基本原理学习总结
一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据 ...
- android菜鸟学习笔记23----ContentProvider(三)利用内置ContentProvider监听短信及查看联系人
要使用一个ContentProvider,必须要知道的是它所能匹配的Uri及其数据存储的表的结构. 首先想办法找到访问短信及联系人数据的ContentProvider能接受的Uri: 到github上 ...
随机推荐
- Docker容器的搭建
Docker容器的搭建 一.先从Docker Hub上面拉取一个基础镜像 命令:docker pull ubuntu 命令说明:pull:拉取镜像的命令,ubuntu:拉取镜像的名称 扩展命令: 命令 ...
- day-14 回归中的相关系数和决定系数概念及Python实现
衡量一个回归模型常用的两个参数:皮尔逊相关系数和R平方 一.皮尔逊相关系数 在统计学中,皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数(Pe ...
- opencv-学习笔记(3)
opencv-学习笔记(3) 这章讲了 图像加法 opencv测试效率 IPYTHON测试效率 图像加法 cv2.add() 要求,两图片必须大小类型相同 然后是图像混合cv2.addWeighted ...
- 创建https证书
第一个里程碑:创建https证书 创建文件认证目录 mkdir /application/nginx/key/ -p 在认证目录下创建认证文件 openssl req -new -x509 -node ...
- 常用实例:js格式化手机号为3 4 4形式
如何在填写手机号时将格式转换为3 4 4形式: 一:填写手机号时,在keyup事件中判断长度,符合条件时在值后面插入空格 $('#username').on('keyup',function(e){ ...
- Python中函数的参数-arguments
归纳起来,Python中函数的定义形式和调用形式主要有如下几种形式: # 函数的定义形式 def func(name) # 匹配positional参数或者keyword参数 def func(nam ...
- Pipeline组Alpha版本发布说明
Pipeline组Alpha版本发布说明 项目名称 Pipeline 项目版本 Alpha版本 负责人 北京航空航天大学计算机学院 ILoveSE 联系方式 http://www.cnblogs.co ...
- Alpha冲刺——第二天
Alpha第二天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...
- vue项目怎么运行
因为要做毕业设计 ,准备用vue来做前端的界面.发现不知如何运行vue的项目,很尴尬.通过查阅网上教程,因此把环境搭建过程记录下来,以备不时之需. 言归正传~~ 首先,列出来我们需要的东西: ...
- Spring MVC之@RequestBody@ResponseBody详解
引言: 接上一篇文章讲述处理@RequestMapping的方法参数绑定之后,详细介绍下@RequestBody.@ResponseBody的具体用法和使用时机: 简介: @RequestBody 作 ...