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学习的更多相关文章

  1. android ContentProvider学习

    1.ContentProvider提供位存储或获取数据提供了统一的接口. 2.使用ContentProvider可以在不同的应用程序之间共享数据. 3.Android为常见的一些数据提供了Conten ...

  2. android四大组件之ContentProvider(二)

    ContentProvider学习笔记 上一章节我们编写了自定义的一个StudentProvider,他提供了两种供外界访问数据的方式,content://come.demo.sqlite.stude ...

  3. android四大组件之ContentProvider(一)

    ContentProvider学习笔记 1. ContentProvider基本概念 ContentProvider向我们提供了我们在应用程序之间共享数据的一种机制,虽然采用文件和SharedPref ...

  4. Android ContentProvider 简单学习

    当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.以前我们学习过文件的操作模式,通过指定文件的操作模式为Context.MODE_WORL ...

  5. Android 学习笔记之ContentProvider实现数据共享....

    PS:最近听老师说打算让我参与企业的app制作,让我加快学习的进度...好吧,貌似下周还有考试...貌似实验室这个app也要做...暂时不管了...那就只能加快进度了,感觉略微的有点激动和紧张,总算是 ...

  6. Android(java)学习笔记245:ContentProvider使用(银行数据库创建和增删改查的案例)

    1. Android的四大组件: (1)Activity  用户交互的UI界面 (2)Service  后台运行的服务 (3)BroadcastReceiver 广播接收者 (4)ContentPro ...

  7. 一、Android四大框架之ContentProvider的学习与运用,实现SQLite的增删改查。

    本文系原创博客,文中不妥烦请指出,如需转载摘要请注明出处! ContentProvider的学习与运用 Alpha Dog 2016-04-13  10:27:06 首先,项目的地址:https:// ...

  8. Android学习记录(3)—Android中ContentProvider的基本原理学习总结

    一.ContentProvider简介        当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据 ...

  9. android菜鸟学习笔记23----ContentProvider(三)利用内置ContentProvider监听短信及查看联系人

    要使用一个ContentProvider,必须要知道的是它所能匹配的Uri及其数据存储的表的结构. 首先想办法找到访问短信及联系人数据的ContentProvider能接受的Uri: 到github上 ...

随机推荐

  1. 《Git学习指南》学习笔记(二)

    第三章 提交究竟是什么 每次提交都会生成一个40位的散列值.只要知道散列值,我们就可以恢复到该次提交,这个操作也被称之为检出(checkout)操作. 访问权限与时间戳 Git会保存每个文件原有的访问 ...

  2. python 打包

    一.下载 pip install Pyinstaller 二.使用Pyinstaller 1.使用下载安装的方式安装的Pyinstaller打包方式 将需要打包的文件放在解压得到的Pyinstalle ...

  3. Java学习笔记-12.传递和返回对象

    1.Clone()方法产生一个object,使用方法后必须产生的object赋值. Vector v2 = (Vector)v.clone(); 2.Clone()方法在object中是保护类型方法, ...

  4. ArrayList与LinkedList的普通for循环遍历

    对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: public static void main(String[] ...

  5. Python3 小工具-僵尸扫描

    僵尸机的条件: 1.足够闲置,不与其他机器进行通讯 2.IPID必须是递增的,不然无法判断端口是否开放 本实验僵尸机选择的是Windows2003 from scapy.all import * im ...

  6. 你真的了解JAVA里的String么

    Java中String类细节问题 (考察点Java内存分配问题) 1. String str1 = "abc";   System.out.println(str1 == &quo ...

  7. python函数中的位置参数、默认参数、关键字参数、可变参数区别

    一.位置参数 调用函数时根据函数定义的参数位置来传递参数. #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_d ...

  8. c# 删除word文档中某一页

    object objPage = 14; int pages = oDoc.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wd ...

  9. PAT1024 强行用链表写了一发。

    主要的思想还是 上课的那个PPT上面的 链表反转的思想. 然后加一点七七八八的 递推. 一层一层往下翻转就好啦. 1A 真开心. 代码:http://paste.ubuntu.net/16506799 ...

  10. TCP 接收窗口自动调节

    https://technet.microsoft.com/zh-cn/magazine/2007.01.cableguy.aspx 欢迎来到 TechNet 杂志“网络专家”的第一部分.TechNe ...