本文包含以下知识点:

  ContentProvider
  Uri 的介绍
  ContentResolver:

  监听ContentProvider的数据改变


一:ContentProvider部分

ContentProvider的作用:

  Content providers store and retrieve data and make it accessible to all applications. They're the only way to share data across applications;

there's no common storage area that all Android packages can access.

  内容提供者作为一个应用程序共享其数据的唯一接口供其他的应用程序访问。比如我开发一个程序:想访问联系人,那么就必须通过联系人里的ContentProvider来获取数据。

  而如果别的应用程序想访问我的数据,必须看我个人的意愿,我意愿创建什么样的ContentProvider愿意共享出什么数据,别人才能看到这些数据。可以理解为我有意通 过

  ContentProvider来暴露我的数据。

ContentProvider的数据存储的形式:

  Content providers expose their data as a simple table on a database model, where each row is a record and each column is data of a particular type and meaning.

  以表格的形式暴露数据:

  For example, information about people and their phone numbers might be exposed as follows:

  

  Every record includes a numeric _ID field that uniquely identifies the record within the table. 每一条记录都会有一个唯一的ID用于索引数据。

ContentProvider的创建:(注意创建完ContentProvider之后一定要在清单文件中进行配置)

  创建步骤如下:

  

  那用中文解说就是:

    1.找到一个你喜欢的方式来存储数据。

    2.继承ContentProvider的类,注意:继承这个类的时候要重写以下六种方法来供调用:

    query() //查询数据,结果集以Cursor返回
    insert() //插入数据
    update() //更新数据
    delete() //删除数据。上面四个方法的第一个参数都要传入一个Uri对象。
    getType() 
    onCreate()

    3.在清单文件中进行配置://自己定义了一个ContentProvider一定要告诉别人不然人家怎么知道呢

      To let the Android system know about the content provider you've developed,

         declare it with a <provider> element in the application's AndroidManifest.xml file.

      Content providers that are not declared in the manifest are not visible to the Android system

      

    配置时还有一个重要的参数:exported,表示该provider对象能否被其他程序访问,当然是true;

   注意:以上的配置是最为简单的配置,所有人只要知道了Provider的uri就能直接访问,实际可能需要加上permission权限来提高权限。

二:Uri部分:

  Uri是实现数据共享的桥梁是Android资源的唯一标识,相当于web中的URL一样。

public static final Uri CONTENT_URI = 
               Uri.parse("content://com.example.codelab.transportationprovider");

    


三:ContentResolver:

ContentProvider的获取和使用就要结合:ContentResolver和Uri来一起配合:
  forexample:在我的应用程序里调用联系人:

    ContentResolver cr = getContentResolver();

    //获取系统的resolver对象,注意此时并不知道要操作哪一个provider的数据。

    //需要一个uri参数在调用参数时与之匹配

    

      CONTENT_URI =Uri.parse("content://com.example.codelab.transportationprovider");

    cr可以调用增删改查的方法,通过Uri的参数实际上是调用对应ContentProvider的增删改查的方法。


四:内容观察者:ContentObserver:

  当数据共享出来之后,可以通过相关方法使得Provider里的数据发生改变,Android提供了内容观察者ContentObserver来监听其数据的改变。

  在实际使用时,我们需要继承ContentObserver的类并重写onChange()方法用于监听数据的改变。

  为了监听指定ContentProvider的数据改变,还需要通过ContentResolver向指定Uri注册内容观察者监听器:

  

  参数介绍:1.uri指定ContentProvider。2.boolean值:假设:uri=content://abc,如果为true,则:content://abc/d数据改变就会触发监听,

        如果为flase:则不会触发。

        3自定义的ContentObserver.

最新文章

  1. apache配置rewrite及.htaccess文件(转载)
  2. mysql,node.js
  3. 【代码分享】简单html5足球射门游戏分享
  4. HTTP Status 500 - javax.servlet.ServletException
  5. js事件的方法
  6. [tools] sublime 使用记录
  7. Eclipse—怎样为Eclipse开发工具中创建的JavaWebproject创建Servlet
  8. 如何用VB获得Windows各类系统目录
  9. Scala中function的理解
  10. java学习笔记----数据类型,变量,常量
  11. angular之$watch、$watchGroup、$watchCollection
  12. Spring REST 与 Zuul 代理
  13. javaweb学习总结(七)——HttpServletResponse对象(一)(转)
  14. 一、WINDOWS下 RabbitMQ安装部署
  15. struct和union的区别
  16. 20190422 DW/BI系统
  17. mysql命令行使用
  18. 在ASP.NET MVC中使用Knockout实践04,控制View Model的json格式内容
  19. chromedriver与google版本的对应
  20. Web Service基础——规范及三要素

热门文章

  1. linux 学习(三) php相关
  2. Python学习之路——基础2(含深浅拷贝)
  3. 一款查询天气的WebApp
  4. Oracle中with关键字的使用
  5. 卸载MySQL以及重装卡到Start Services的解决办法(亲测有效,刚重装成功)
  6. jQuery编程代码规范的最佳实践
  7. 请对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别?
  8. css3 动画应用 animations 和transtions transform在加上JavaScript 可以实现硬件加速动画。
  9. 只包含因子2 3 5的数(51NOD 1010)
  10. 爬虫——Selenium与PhantomJS