文档章节

Android之入门:ContentProvider

AceKwei
 AceKwei
发布于 2015/12/16 14:06
字数 777
阅读 16
收藏 0

多个app之间用什么共享数据呢?那就是ContentProvider了。。。

ContentProvider都是要和ContentResolver配合使用的,一个提供服务,另一个接收服务。

AppA把数据放在那,让AppB去操作,这样就可以了,但是这样做有很多危险啊,数据暴露出来,AppC看见了也可以操作啊,所以这里就专门做了个类实现数据共享。

A的数据该如何给B才安全呢?A在专门提供了一个“口令”Uri,B如果想要对A的数据进行操作,那就要带上这个口令才行,当然B也不能想怎么操作就怎么操作,这就需要A提供特定的操作接口给B。

针对数据的操作主要就是增删改查,那A提供的操作接口一般就是query()\insert()\update()\delete()四个方法了,具体如何实现,就好好看书里的案例吧,无非就是照葫芦画瓢实现几个方法,在ContentResolver里也是调用相应的方法即可。

public class PersonContentProvider extends ContentProvider{ 
   public boolean onCreate() 
   public Uri insert(Uri uri, ContentValues values) 
   public int delete(Uri uri, String selection, String[] selectionArgs) 
   public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 
   public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 
   public String getType(Uri uri) 
}

ContentProvider的生命周期方法只有onCreate,在别的app第一次调用Provider时创建。

要想使用ContentProvider,必须想要进行登记,毕竟是四大组件之一,岂能给你想用就用,还有没有王法了:

<manifest.... > 
   <application android:icon="@drawable/icon" android:label="@string/app_name"> 
      <provider android:name=".PersonContentProvider"  
           android:authorities="com.acekwei.providers.personprovider"/> 
   </application> 
</manifest>

准备工作都做好了,那就可以用ContentResolver调用了,这当然是其它APP实现了,这里借用别人博客的代码,大家看看就好,不要较真:

ContentResolver resolver =  getContentResolver(); 
Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person"); 
//添加一条记录 
ContentValues values = new ContentValues(); 
values.put("name", "linjiqin"); 
values.put("age", 25); 
resolver.insert(uri, values);   
//获取person表中所有记录 
Cursor cursor = resolver.query(uri, null, null, null, "personid desc"); 
while(cursor.moveToNext()){ 
   Log.i("ContentTest", "personid="+ cursor.getInt(0)+ ",name="+ cursor.getString(1)); 
} 
//把id为1的记录的name字段值更改新为zhangsan 
ContentValues updateValues = new ContentValues(); 
updateValues.put("name", "zhangsan"); 
Uri updateIdUri = ContentUris.withAppendedId(uri, 2); 
resolver.update(updateIdUri, updateValues, null, null);
//删除id为2的记录 
Uri deleteIdUri = ContentUris.withAppendedId(uri, 2); 
resolver.delete(deleteIdUri, null, null);

那口令Uri该如何规定了?

content://com.acekwei.providers.personalprovider/xxxx

如上面这个类似网址的字符串所示:

content://  ----->这个是协议,就像https://

com.acekwei.providers.personalprovider   ------->这个就是提供者啊,否则你拿着口令不知道该找谁吧

xxxx  ------->这个就自己定了,我还没理解,就不多说了,只有在具体使用后才能理解吧

很多年后使用者B拿着口令来提数据了,A要能够通过口令知道需要提供哪些数据,这些数据是否还在吧?

这里就有UriMatcher类对Uri进行各种操作。

 

B拿着口令,随时可以调用A的数据,但是A的数据是在变化的,只有当A有了特定数据B才想去提数据,那B该如何监听A的变化呢?

Android提供了ContentObserver类实时进行监听~

© 著作权归作者所有

AceKwei
粉丝 1
博文 21
码字总数 9502
作品 0
程序员
私信 提问
Android中创建自己的ContentProvider

Android是如何实现应用程序之间数据共享的?我们以前谈到外界的程序可以 通过ContentResolver接口访问ContentProvider提供的数据,今天我们来谈下如何创建自己的ContentProvider来实现应用程...

鉴客
2011/12/21
1K
0
Android系统架构-----Android的系统体系架构

一、Android的系统体系结构 在入门了一个简单的Android的Hello World以后,我们首先来看一下我们Android的整体系统架构图: 这个就是我们Android的整体系统架构图了,我们首先从整体上来看看...

天王盖地虎626
01/11
0
0
android Content Provider 详解

Android中的Contentprovider机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的唯一方式。在android系统中,没有一个公共的内存区域,供多个应用共享存储数据。 Android提供了一...

鉴客
2011/12/21
39.2K
5
Android 应用程序之间数据共享—ContentProvider

在Android 应用程序之间数据共享—-ContentResolver中,已经说明了Android是如何实现应用程序之间数据共享的,并详细解析了如何获取其他应用程序共享的数据。ContentProviders存储和检索数据...

鉴客
2011/12/21
507
0
Android开发必不可少原理问题

随着互联网的迅速发展,Android技术也是发生很大的变化,要求也是越来高了,在11,12年只要会基本的Android组件,会listview,分享就感觉很牛了,智能手机的发展,及用户普通追求高效率,用户...

dominic69
2018/09/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

typescript 接口 函数类型 可索引类型

函数类型 可索引类型 数字索引签名 字符串索引签名 数字索引签名返回值 必须是 字符串索引签名返回值的子集 只读索引签名

lilugirl
今天
3
0
Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0
增加 PostgreSQL 服务进程的最大打开文件数

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7 要在systemd的配置里加才行...

helloclia
今天
2
0
组合模式在商品分类列表中的应用

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。 先定义一个树形结构的商品接口 public interface TreeProduct { List<TreeProduct> allProducts(...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部