内容提供器(Content Provider)--跨程序共享数据
来源:互联网 发布:手机淘宝有什么活动 编辑:程序博客网 时间:2024/06/05 10:03
Android数据持久化的技术,包括文件存储、SharedPreferences存储、以及数据库存储。但是这三种存储方式只能在当前应用中访问。因此Content Provider提供了不同应用程序之间实现数据共享的功能。下面简单介绍一下如何使用:
1.用法:
1)使用现有的内容提供器来读取和操作相应程序中的数据
2)创建自己的内容提供器给我们程序的的数据提供外部访问接口
2.访问其他程序中的数据:ContentResolver
ContentResolver提供了一系列的方法用于对数据进行CRUD操作,其增删改查方法不接收表名参数,使用Uri参数,这个参数成为内容URI,它主要由两部分组成,权限和路径。标准的格式写法如下:content://com.example.app.provider/table(权限:content://com.example.app.provider,路径:table,table为数据库的数据表)。
得到内容URI后,要解析成Uri对象才可以做为参数传入:Uri uri = Uri.parse("content://com.example.app.provider/table")
1) 得到Uri对象后,可以使用这个对象来查询table表中的数据
Cursor cursor = getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder)
得到cursor对象后,取出数据
while(cursor.moveToNext()){
String column = curcor.getString(cursor.getColunmIndex("column"));
} curcor.close();
2) 向table表添加一条数据
ContentValues cv = new Contentvalues();
cv.put("column","text");
getContentResolver().insert(uri, cv);
3) 更新数据
ContentValues cv = new Contentvalues();
cv.put("column","");
getContentResolver().update(uri, cv,"column = ?",new String[]{"change"});
4) 删除数据
getContentResolver().detele(uri,"column = ?",new String[]{"change"})
3.例子:读取系统联系人(此处主函数省略,提供一个按钮用于点击)
@Overridepublic void onClick(View view) { switch (view.getId()){ case R.id.btn_4: Intent intent = new Intent(this,CPActivity.class); startActivity(intent); break; }}public class CPActivity extends Activity{ private ListView contactsListView; private ArrayAdapter<String> adapter; List<String> list = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cp); //在xml文件中只需一个ListView用于显示读取到的联系人信息即可 contactsListView = (ListView)findViewById(R.id.list_contacts); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list); contactsListView.setAdapter(adapter); getContacts(); } private void getContacts(){ Cursor cursor =null; try{ cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null); while (cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String num = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); list.add(name+" : "+num); } }catch (Exception e){ e.printStackTrace(); }finally { if(cursor != null){ cursor.close(); } } }}
4.创建自己的内容提供器要点
1) 新建一个类去继承ContentProvider,然后重写其六个抽象方法,其中getType()方法用于获取Uri对象岁对应的MIME类型
2) UriMatcher: 提供addURI()方法,接收三个参数,分别把权限、路径和一个自定义代码传入
uriMatcher.addURI("权限", "路径", "自定义代码");
swicth(uriMatcher.match(uri)){
case 自定义代码:
//操作
}
3) MIME类型例:
URI : content://com.example.app.provider/table
MIME : vnd.android,cursor.dir/vnd.com.example.app.provider.table
完善getType() :
swicth(uriMatcher.match(uri)){
case 自定义代码:
return "vnd.android,cursor.dir/vnd.com.example.app.provider.table"; //操作
}
- 内容提供器(Content Provider)--跨程序共享数据
- 安卓跨程序共享数据:内容提供器Content Provider
- 内容提供者(Content Provider)--跨程序共享数据
- 【Android】内容提供器(Content Provider)
- 内容提供器 Content Provider (一)
- 内容提供器(Content Provider)
- Content Provider实现跨程序数据共享
- 内容提供器(Content Provider)
- Content Provider(内容提供器)
- 内容提供器---Content Provider
- 内容提供器 Content Provider
- Content Provider 内容提供器
- Android 之内容提供程序(Content Provider)
- 跨程序共享数据,内容提供器
- 内容提供器(二 - 跨程序数据共享)
- Content Provider Basics(内容提供器基础)
- Creating a Content Provider(构建内容提供器)
- 内容提供器 Content Provider 入门(一)
- 翻转格子poj 1753
- Sharepoint 轻量化应用构建之熟悉Sharepoint Designer 2013!
- a标签加入单击事件 屏蔽href跳转页面
- json get请求 img src 带 中文 解决
- 转载自大牛的博文-解决大批量插入数据到数据库中的问题
- 内容提供器(Content Provider)--跨程序共享数据
- 位运算——用位存储40亿个40亿以内的整数
- 网络编程---Socket编程
- 【HDU 5584】 LCM Walk(逆推)——2015ACM/ICPC亚洲区上海站
- 学习java的个人经验!
- SQL查询相关技术-6.SQL操作(自选设置条件)
- 【数据结构和算法05】 红-黑树(看完包懂~)
- 面试题5-从尾到头打印链表
- 用Xcode自带的svn搭建本地SVN服务器