1、什么情况下需要使用ContentProvider

  跨进程提供数据访问的接口,如果在同一个App下,没有必要使用此种方式

2、自定义ContentProvider

  1. public class MyContentProvider extends ContentProvider {
  2. private MyDbHelper helper; //Sqlite帮助类
  3. private SQLiteDatabase db;
  4. private static UriMatcher matcher;
  5. private static final String AUTHORITY="com.loo.person";
  6. static {
  7. matcher=new UriMatcher(UriMatcher.NO_MATCH);
  8. matcher.addURI(AUTHORITY,"person",1);
  9. matcher.addURI(AUTHORITY,"person/#",2);
  10. }
  11. @Override
  12. public boolean onCreate() {
  13. helper=new MyDbHelper(getContext());
  14. db=helper.getReadableDatabase();
  15. return false;
  16. }
  17.  
  18. @Nullable
  19. @Override
  20. public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
  21.  
  22. if( matcher.match(uri)==1){
  23. return db.query("person",null,null,null,null,null,null);
  24. }else if(matcher.match(uri)==2){
  25. long id= ContentUris.parseId(uri);
  26. return db.rawQuery("select * from person where id="+id,null);
  27. }
  28.  
  29. return null;
  30. }
  31.  
  32. @Nullable
  33. @Override
  34. public String getType(Uri uri) {
  35.  
  36. return null;
  37. }
  38.  
  39. @Nullable
  40. @Override
  41. public Uri insert(Uri uri, ContentValues values) {
  42. if(matcher.match(uri)==1){
  43. long flag= db.insert("person",null,values);
  44. if(flag>0){
  45. getContext().getContentResolver().notifyChange(uri,null);
  46. return uri;
  47. }
  48. }
  49. return null;
  50. }
  51.  
  52. @Override
  53. public int delete(Uri uri, String selection, String[] selectionArgs) {
  54. return 0;
  55. }
  56.  
  57. @Override
  58. public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
  59. return 0;
  60. }
  61. }

AndroidManifest中注册

  1. <provider
  2. android:authorities="com.loo.person" //主机名
  3. android:name=".MyContentProvider"></provider>

3、如何访问?

  访问需要一个Uri content://com.loo.person/person

  getContentResolver()即可调用一些相关的增删改查的方法

4、当数据发生更改后如何响应?

  当数据发生更改时,调用getContext().getContentResolver().notifyChange(uri,null);

  并在获取数据的地方

  1. getContentResolver().registerContentObserver(uri, false, new ContentObserver(handler) {
  2. @Override
  3. public void onChange(boolean selfChange) {
  4. List<Person> list= getData();
  5. adapter=new MyAdapter(MainActivity.this,list);
  6. listview.setAdapter(adapter);
  7. }
  8. });

ContentProvider小结的更多相关文章

  1. 四大组件之ContentProvider小结

    总结提高,与君共勉 1.什么是Content Provider 内容提供器( Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,提供了一套完整的机制,允许一个程序访问另 ...

  2. 四大组件之ContentProvider

    前言 ContentProvider作为Android的四大组件之一,是属于需要掌握的基础知识,可能在我们的应用中,对于Activity和Service这两个组件用的很常见,了解的也很多,但是对Con ...

  3. 十、Android学习第九天——小结(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十.Android学习第九天——小结 通过这段时间的学习,今晚上来做个小小 ...

  4. Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8387752.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  5. Android 四大组件之" ContentProvider "

    前言 ContentProvider作为Android的四大组件之一,是属于需要掌握的基础知识,可能在我们的应用中,对于Activity和Service这两个组件用的很常见,了解的也很多,但是对Con ...

  6. Android基础新手教程——4.4.1 ContentProvider初探

    Android基础新手教程--4.4.1 ContentProvider初探 标签(空格分隔): Android基础新手教程 本节引言: 本节给大家带来的是Android四大组件中的最后一个--Con ...

  7. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  8. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  9. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

随机推荐

  1. clang编译器简介

    本文部分内容引用: 中文维基百科. 结构化编译器前端--clang介绍. 什么是clang编译器? clang是LLVM编译器工具集的一个用于编译C.C++.Objective-C的前端.LLVM项目 ...

  2. .split()函数使用方法

    split说明 split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list) split语法 str.split('type',num)[n] 整个语法的意思是:以 ...

  3. python小知识点

    问题:求列表中每个元素的元素次方之和>>> a=[1,2,3,4]>>> k=len(a)第一种解法#    s=0#    for x in a:#        ...

  4. 得到APP【每天听本书】微信交流群(每天更新)

    得到APP[每天听本书]微信交流群,每天更新下载学习资料 添加个人微信号:zhidu10000 进入微信群. “坚持每天读一本书,每天进步1.01,每年进步37.8倍” 2016年书单合辑点此链接,查 ...

  5. git常见命令

    总结自己的Git常用命令 使用git也有一段时间了,把自己常用的命令用自己的描述记录起来,方便自己备忘也方便其他人参考. 目录: 最基本的命令: git clone 拷贝并跟踪远程的master分支. ...

  6. windows使用nginx实现网站负载均衡测试实例

    如果你关注过nginx,必定知道nginx这个软件有什么用的,如果你的网站访问量越来越高,一台服务器已经没有办法承受流量压力,那就增多几台服务器来做负载吧.做网站负载可以买硬件设备来实现,比如F5,不 ...

  7. webstorm(注册,激活,破解,码,一起支持正版,最新可用)(2016.9.2更新)

    webstorm(注册,激活,破解,码,一起支持正版,最新可用)(2016.9.2更新)   来源于:http://blog.csdn.net/xx1710/article/details/51725 ...

  8. 修改eclipse中包的显示结构为树形

  9. javascript 数组去重 unique

    晚上无事,偶然看到这么个小测试,拿来写一写,希望大家提建议: 直接上代码: Array.prototype.unique = function (isStrict) { if (this.length ...

  10. 安装lua和openresty

    #### ubuntu 16.04 64bit 安装Lua luajit 及openresty 1 安装lua ,因为luajit 支持lua5.1较好.貌似不支持5.2和5.3作为学习,我就安装5. ...