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上 ...
随机推荐
- Android开发-API指南-<uses-permission>
<uses-permission> 英文原文:http://developer.android.com/guide/topics/manifest/uses-permission-elem ...
- Docker Remote API v1.24
1. Brief introduction The Remote API has replaced rcli. The daemon listens on unix:///var/run/docker ...
- Spring Boot - Filter实现简单的Http Basic认证
Copy自http://blog.csdn.net/sun_t89/article/details/51916834 @SpringBootApplicationpublic class Spring ...
- Git使用笔记一(关于如何设置密钥及提交)(Windows)
如何设置密钥 ssh-keygen -t rsa或ssh-keygen -t rsa -C ‘邮箱’ (注意 1.-t前有一个空格:2.keygen是key generate的缩写:3.而后连续输入三 ...
- # 团队作业MD
队员姓名与学号 051501124 王彬(组长) 111500206 赵畅 031602215 胡展瑞 031602320 李恒达 031602131 佘岳昕 031602431 王源 0316022 ...
- Ubuntu录制gif动态图
大神写博客的时候通常一个Demo会附带一个动态图展示效果.在windows和mac上应该很容易找到录制工具,下面记录一下我在ubuntu下录制gif的过程. 下载byzanz录制工具 在ubuntu软 ...
- javaweb引用jar类库的问题
JAVAWEB中,需要引用的jar类库必须放在/WebContent/WEB-INF/lib文件夹中.不然就会各种报错.
- 3dContactPointAnnotationTool开发日志(六)
一种可行的思路就是枚举一个模型的三角面片,然后判断三角形是否与另一个物体相交即可.为了让效果更好我想只渲染模型的线框. 在网上查了半天好像Unity里都没有自带的方便的渲染线框的方式,我又自己 ...
- PokeCats开发者日志(十一)
现在是PokeCats游戏开发的第六十天的上午,易版权的状态变为了待收证,但愿不久就能送到了吧.
- 探讨C++实现一个不可被继承的类
C#和Java都提供了一种机制让一个类不能被继承,如C#中的sealed关键字和Java的final关键字,然而C++程序员就没这么好命了.不过C++也可以模拟出这种效果,原理基于:子类的构造函数会自 ...