ContentProvider 学习

ContentProvider 主要用于应用间数据共享(也能说是进程间数据共享)。

ContentProvider 和ContentResolver 提供了类似一组标准的接口,前者负责数据提供,通过后者来访问前者提供的数据。ContentProvider 类似服务端,ContentResolver类似客户端。

ContentProvider 下面的数据一般对应sqlite数据库里的数据。(我想也可以是File)

ContentProvider 提供CRUD操作。

ContentProvider 和 ContentResolver自动处理进程间通信。

ContentProvider 是 其内部数据 和 外部以表形式展示的数据 间的一个抽象层。

要访问provider需要在清单文件中注册相应的权限


ContentUri

ContentUri 包括 authority (provider name) + path(table)

content://user_dictionary/words
scheme :// authority/path

Uri,Uri.Builder,ContentUri


用ContentResolver获取数据要在非Ui线程中。


一个ContentResolver.query()的查询语句,

mCursor = getContentResolver().query(
    UserDictionary.Words.CONTENT_URI,   // The content URI of the words table
    mProjection,                        // The columns to return for each row
    mSelectionClause                    // Selection criteria
    mSelectionArgs,                     // Selection criteria
    mSortOrder);                        // The sort order for the returned rows

其实就是去匹配下面这个sql语句

SELECT _ID, word, locale FROM words WHERE word = <userinput> ORDER BY word ASC;
要哪些列,满足条件的行,按什么顺序。需要匹配用户输入的变量在mSelectionArgs里,在mSelectionClause中用占位符 ? 。


防止Sql注入

用?,而不要用连接 var = userinput  (验证)


Cursor,用个ListView或者SimpleCursorAdapter来处理query返回的Cursor,但Cursor对应的表中必须有行_id.


权限管理:

provider 要想被其他应用访问,必须声明权限,其他应用申请对应权限,用户授权后其他应用就可以访问了。provider应用内的其他组件有完全的读写权限,不管provider声明权限与否。

声明权限:在<provider>子标签<android:grantUriPermission>


3种访问Provider的方式:

批处理,异步查询,发送intent



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值