ContentProvider入门
来源:互联网 发布:cdr软件手机版 编辑:程序博客网 时间:2024/05/22 14:00
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时,会回调一次ContentProvider05-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()
0 0
- ContentProvider入门
- ContentProvider入门
- Android入门:ContentProvider
- android ContentProvider入门
- android ContentProvider入门使用
- Android入门:ContentProvider
- Android入门:ContentProvider
- 入门六 ContentProvider
- Android入门:ContentProvider
- ContentProvider从入门到精通
- ContentProvider从入门到精通
- Android中ContentProvider和ContentResolver使用入门
- Android中ContentProvider和ContentResolver使用入门
- Android中ContentProvider和ContentResolver使用入门
- Android 中ContentProvider 和 ContentResolver使用入门
- Android入门:监听ContentProvider数据改变
- 安卓入门---四大组件--ContentProvider
- (原创)ContentProvider内容提供者入门
- html5-在网页中来回拖放图片
- 控制反转和依赖注入
- zju1610 count the colors 线段树
- iOS 应用进入后台后,如何短暂的执行一个任务
- java中的sleep()和wait()的区别
- ContentProvider入门
- 正则表达式学习与实例代码
- nyoj 1112 求次数
- 李白的诗赏析 : 独坐敬亭山译文注释
- 进程与线程的区别
- background-position 用法详细介绍
- 为eclipse添加NDK
- Trick of clipToPadding
- SQL Server中IMAGE类型转字符串