前言
Hi,大家好,我们又双叒叕见面啦,为了让大家快速的学习Android知识,我们每天都在更新文章,相信小伙伴们已经开始眼熟我们了!这一期我们讲解ContentProvider(内容提供者)相关知识,他也是我们近期更新的Android四大组件中最后一个。话不多说,让我们赶紧开始学习吧~
简介
ContentProvider是Android系统中为开发者专门提供的不同应用间进行数据共享的组件,其提供了一套标准的接口用来获取以及操作数据,准许开发者把自己的应用数据根据需求开放给其他应用进行增删改查,而无须担心直接开放数据库权限而带来的安全问题。系统预置了许多ContentProvider用于获取用户数据,例如消息、联系人、日程表等。
具体形式如下图所示:
使用方式
1 ContentResolver
在ContentProvider的使用过程中,需要借用ContentResolver来控制ContentProvider所暴露处理的接口,作为代理来间接操作ContentProvider以获取数据。
在 Context.java 的源码中如下抽象方法
/** Return a ContentResolver instance for your application's package. */
public abstract ContentResolver getContentResolver();
所以可以在所有继承Context的类中通过 getContentResovler() 方法获取ContentResolver
ContentResolver contentResolver = getContentResovler();
2 ContentProvider
ContentProvider作为Android四大组件之一,并没有Activity那样复杂的生命周期,只有简单地onCreate过程。
创建一个自定义ContentProvider的方式是继承ContentProvider类并实现其六个抽象方法:
/**
* @author: 下码看花
* date: 2019/8/8
* description: ContentProvider例子
*/
public class MyContentProvider extends ContentProvider {
/**
* 执行初始化工作
* @return
*/
@Override
public boolean onCreate() {
return false;
}
/**
* 查询数据
* @param uri
* @param projection
* @param selection
* @param selectionArgs
* @param sortOrder
* @return
*/
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
return null;
}
/**
* 通过Uri返回对应的MIME类型
* @param uri
* @return
*/
@Override
public String getType(@NonNull Uri uri) {
return null;
}
/**
* 插入新数据
* @param uri
* @param values
* @return
*/
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
return null;
}
/**
* 删除已有数据
* @param uri
* @param selection
* @param selectionArgs
* @return
*/
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
/**
* 更新数据
* @param uri
* @param values
* @param selection
* @param selectionArgs
* @return
*/
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {