Android四大组件之一ContentProvider内容提供者(继SQLite数据存储篇)
2017-02-07 17:11
911 查看
ContentProvider内容提供者
ContentProvider(内容提供者)是用来共享应用程序内的数据;当我们需要把应用程序的数据共享给其他的应用程序的时候用它;
该组件对外提供了其他应用可以直接访问的增删改查方法;
只要通过ContentProvider暴露了自己的数据,不管是否启动了应用程序,都可以访问到。
ContentProvider原理
简单来说,ContentProvider暴露数据的过程,类似于网站的访问。例如:Servlet只是一个接口,提供了访问数据库的功能,但是并不对外提供完整的操作页面。如果需要操作这个接口的话,就必须要有一个客户端通过一个URI来访问
当成Android内部的网站,地址是URI
浏览网页时的URI
http://www.google.com.hk/intl/zh-CN/images/logo_cn.png
http是固定的,指定进行什么协议
红色部分,网站域名部分,网站总是跟域名绑定
最后就是网站资源部分
内容提供者的URI
URI代表要操作的数据,由scheme、authorites、path三个部分组成
content://cn.verydu.wq.providers.bookprovider/book/2
scheme:固定位content,代表访问内容提供者
authrites:中间的共色部分就是ContentProvider的归属,通过这部分找到对应的ContentProvider(节点中的authorites属性)
path:资源路径,可根据业务逻辑自定义
向URI发送请求,这种请求最后委托给ContentProvider处理
注册ContentProvider时,需要为它绑定一个URI
发送请求必须要由一个客户端发出,这个客户端就是ContentResolver
相当于访问网页时的浏览器
创建ContentProvider
首先自定义一个类继承ContentProvider,并根据需要重写内部的方法public class MyPersonProvider extends ContentProvider { @Override public boolean onCreate() { Log.i("test","onCreate"); return false; } @Nullable @Override public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) { Log.i("test","query"); return null; } @Nullable @Override public String getType(Uri uri) { Log.i("test","getType"); return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues contentValues) { Log.i("test","insert"); return null; } @Override public int delete(Uri uri, String s, String[] strings) { Log.i("test","delete"); return 0; } @Override public int update(Uri uri, ContentValues contentValues, String s, String[] strings) { Log.i("test","update"); return 0; } }
在清单文件的节点下进行配置,标签中需要制定那么和authorities
<!--配置内容提供者--> <provider android:authorities="com.example.android_24_contentprovider.PERSONS" android:name=".com.zking.provider.MyPersonProvider" android:exported="true" ></provider>
访问ContentProvider
新建一个Module,通过Context的getContentResolver()方法获得ContentResolver对象@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取内容访问者 cr = getContentResolver(); }
再调用ContentResolver对象的方法就可以访问内容提供者了(我下面做的是一个简单的查询所有)
//查询所有 public void getData(View view){ //协议 (地址,类似http:///www.baidu.com)前缀是content:// Uri uri = Uri.parse("content://com.example.android_24_contentprovider.PERSONS"); //访问数据 cr.query(uri,null,null,null,null); }
相关文章推荐
- Android四大组件之一ContentProvider(内容提供者)
- Android四大组件之ContentProvider(内容提供者)01
- Android基础之四大组件-ContentProvider(内容提供者)
- Android四大组件之内容提供者ContentProvider
- Android四大组件之ContentProvider(内容提供者)02
- android四大组件之一内容提供者contentprovider
- Android四大组件之ContentProvider(内容提供者)
- Android之四大组件之一-ContentProvider内容提供者的使用(二)
- Android四大组件之一之内容提供者ContentProvider
- Android 四大组件之一 :ContentProvider内容提供者从入门到精通
- 数据存储详解(四)及四大组件之一 之--->ContentProvider(内容提供者)
- Android中ContentProvider(内容题供着)2访问自定义的内容提供者,共享Sqlite数据库数据
- Android组件系列----ContentProvider内容提供者【2】
- Android开发14——监听内容提供者ContentProvider的数据变化
- 【Android学习之道】 四大组件之ContentProvider内容提供器
- Android Day09四大组件之内容提供者ContentProvider
- Android 使用ContentProvider(内容提供者)共享数据
- Android四大组件之ContentProvider----数据共享
- Android四大组件之内容提供者--ContentProvider
- Android组件之ContentProvider(内容提供者)