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上 ...
随机推荐
- 【Linux 运维】linux系统修改主机名
主机名的修改: 1.命名解释: [root@localhost~]# 分别代表: 用户名(root) 主机名(localhost) 当前路径(~,当前用户的home目录) 权限标志位(#代表root ...
- 259 [LeetCode] 3Sum Smaller 三数之和较小值
题目: Given an array of n integers nums and a target, find the number of index triplets i, j, k with 0 ...
- 关于C#中如何使用wmi获得操作系统信息?
最近项目中用到了windows server 2012操作系统中的存储池和ISCSI Disk的技术.前期,我们整个操作都是用power shell脚本去实现了.带来了不方便,后期要使用wmi API ...
- LogisticRegression Algorithm——机器学习(西瓜书)读书笔记
import numpy as np from sklearn.datasets import load_breast_cancer import sklearn.linear_model from ...
- js实现滑动器效果
最近公司在做一个项目,页面中要用到滑动器效果,我的第一反应是使用HTML5 input类型中的range类型,但马上我就否定了这个想法,因为range类型存在浏览器的兼容性问题(在主流浏览器中).但又 ...
- c语言乐曲演奏——《千本樱》
这个程序着实花费了我好长的时间,我本身对音乐一窍不通,先是跟着girl friend学习了简谱,根据c调44拍的<千本樱>写下了下面的程序. #include<stdio.h> ...
- 团队作业week9 情景测试
一.使用人群:学生.计算机工作者.对计算机感兴趣的人 1.学生:学生是学霸系统的主要用户.学生一般会通过网络寻找与自己的课程,作业有关的信息.首先,可以通过我们的搜索功能在我们的数据库中寻找我们从网络 ...
- C++与C#数据类型对应关系总结
https://blog.csdn.net/u010159842/article/details/51720458 添加: 1.c++参数含有&,c#也需要用ref关键字. 2.在c++中声明 ...
- 解决python中文编码错误问题
对于初学者而言,编码问题或许还没有没重视起来,但是编码问题是中文开发者必须面对的.今天来看下python开发中如何解决编码问题.注意:本篇讲的是最常见的一种编码问题,其他编码问题,如json函数引起的 ...
- ACM hust 2.1
来自咸鱼王的呻吟 http://www.xiami.com/song/3599639?spm=a1z1s.3521865.23309997.1.PbLu7E 配合咸鱼食用效果更佳(右键新窗口打开) 题 ...