ContentProvider入门
2016-05-18 17:00
627 查看
ContentProvider简介
多进程的程序之间进行互相通信时,使用ContentProvider可以实现数据的共享,ContentProvider提供的数据可以来自文件,数据库等,通过URI与调用者进行关联.从这点上看,ContentProvider使应用像一个网站,URI即域名。:-)
在ManiFest文件 中进行声明
<!-- antuorities属性表明当期ContentProvider的URI地址 --> <provider android:name=".MyProvider" android:authorities="com.terry.mycontentprovider" android:exported="true"> </provider>
简单的Provider
public class MyProvider extends ContentProvider{ @Override public int delete(Uri arg0, String arg1, String[] arg2) { Log.v("LOG","ContentProvider -- delete()"); return 0; } // 获取MIIE类型 @Override public String getType(Uri arg0) { return null; } @Override public Uri insert(Uri arg0, ContentValues arg1) { Log.v("LOG","ContentProvider -- insert()"); return null; } @Override public boolean onCreate() { Log.v("LOG", "ContentProvider -- onCreate()"); return false; } @Override public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3, String arg4) { Log.v("LOG","ContentProvider -- query()"); return null; } @Override public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) { Log.v("LOG", "ContentProvider --update()"); return 0; } }
ContentProvider 的生命周期
ContentProvider 只用一个生命周期,就是onCreate()当其他应用第一次访问该ContentProvider时,onCreate()方法会被调用一次.
URI
标示ContentProvider的位置,格式如下实际上,为了能确定ContentProvider实际能处理的Uri,以及确定每个URI参数中所操作数据,需要使用UriMatcher类
ContentResolver
通过Context的getContentResolver()获取该对象,然后对该 对象的操作,实际上是操作的Uri对应的ContentProvider对象这是另一个APP的界面,用于使用ContentResolver调用ContentProvider
布局很简单,上面有四个Button对应CRUD四个操作,现在只用前两个为例
public class MainActivity extends ActionBarActivity { private ContentResolver mResolver; // 获取URI对象,与上面的保持一致 private static Uri URI = Uri.parse("content://com.terry.mycontentprovider"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mResolver = getContentResolver(); } public void query(View v) { Log.v("LOG", "ContentResolver -- query()"); mResolver.query(URI, null, null, null, null); } public void insert(View v) { Log.v("LOG", "ContentResolver -- insert()"); ContentValues c = new ContentValues(); c.put("Key", "Value"); mResolver.insert(URI, c); } }
好了,看下Log的顺序吧。
05-18 04:59:17.413: V/LOG(4599): ContentResolver -- query() // 在第一次使用ContentProvider时,会回调一次ContentProvider 05-18 04:59:17.576: V/LOG(4621): ContentProvider -- onCreate() 05-18 04:59:17.582: V/LOG(4621): ContentProvider -- query() 05-18 04:59:21.541: V/LOG(4599): ContentResolver -- insert() 05-18 04:59:21.565: V/LOG(4621): ContentProvider -- insert()
相关文章推荐
- PHP+MYSQL 出现乱码的解决方法
- tp框架总结(二)
- PHP下载文件的函数实例代码
- ContentProvider的主要作用
- PHP 数组遍历方法大全(foreach,list,each)
- Windows YII2安装
- PHP魔术方法和魔术常量
- php traits 详解
- PHP JSON数据 AJAX
- tp下载已经存在的xlsx
- aws 上使用EC2 搭建***
- PHP时间格式大全
- PHP数组元素的顺序与逆序排序
- php进阶函数
- php 下载文件的函数
- 最全的php.curl参数详解
- LAMP组合基础知识 WordPress、phpmyadmin安装
- PHP 分页函数
- tp框架总体学习总结(一)
- php设计模式