ContentProvider内容提供者 和 ContentResolver内容解析者
ContentProvider和ContentResolver
内容提供者是应用程序之间共享数据的接口,Android系统将这种机制应用到方方面面。比如:联系人提供者专为不同应用程序提供联系人数据;设置提供者专为不同应用程序提供系统配置信息,包括内置的设置应用程序等。
ContentProvider内容提供者的使用:
1.AndroidManifest.xml注册内容提供者
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zhang.mycontentprovider">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:name=".MyContentProvider"
android:authorities="com.MyContentProvider.db"
android:exported="true"></provider>
</application>
</manifest>
2.自定义一个MyContentProvider,它继承ContentProvider,在清单配置文件里,ContentProvider有一个属性authorities,这就是ContentProvider的身份证,所以一般为了保证唯一性,使用包名的方式命名.
ContentProvider提供几个重要的函数,MyContentProvider必须重载,这些函数(inset,query,update,delete)顾名思义就是对数据库的增删改查。
public class MyContentProvider extends ContentProvider {
SQL_zhuce sql_zhuce;
SQLiteDatabase sqLiteDatabase;
UriMatcher uriMatcher;
@Override
public boolean onCreate() {
sql_zhuce = new SQL_zhuce(getContext(), "数据库", null, 1);
sqLiteDatabase = sql_zhuce.getReadableDatabase();
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
/*
authority 注意 这个参数和你在清单文件里面定义的要一样
*/
uriMatcher.addURI("com.MyContentProvider.db", "query", 1);
uriMatcher.addURI("com.MyContentProvider.db", "insert", 2);
uriMatcher.addURI("com.MyContentProvider.db", "update", 3);
uriMatcher.addURI("com.MyContentProvider.db", "delete", 4);
return false;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
if (uriMatcher.match(uri) == 1) {
return sqLiteDatabase.query("数据表", projection, selection, selectionArgs, null, null, sortOrder);
}
return null;
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
if (uriMatcher.match(uri) == 2) {
//操作数据库 说明路径匹配成功
SQLiteDatabase db = sql_zhuce.getReadableDatabase();
//返回值代表新 插入行数的id
long insert = db.insert("数据表", null, values);
db.close();//关闭数据库
Uri uri2 = Uri.parse("com.itheima.insert/" + insert);
return uri2;
}
return null;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
if (uriMatcher.match(uri) == 3) {
SQLiteDatabase db = sql_zhuce.getReadableDatabase();
//影响的行数
int update = db.update("数据表", values, selection, selectionArgs);
db.close();//关闭数据库
return update;
}
return -1;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
if (uriMatcher.match(uri) == 4) {
//说明路径匹配成功 对数据库进行删除的操作
SQLiteDatabase db = sql_zhuce.getReadableDatabase();
//代表影响的行数
int delete = db.delete("数据表", selection, selectionArgs);
db.close();//关闭数据库
return delete;
}
return -1;
}
}
3.Android提供了ContentProvider,定义一个类去实现ContentProvider的抽象接口将自己的数据完全暴露出去。
在其他应用要操作暴露出来的数据,用ContentResolver内容解析者即可
1、从当前Activity获取系统的ContentResolver;
2、使用ContentProvider的insert、delete、update、query方法对ContentProvider的内容进行增删改查;
3、如果是使用query是的到一个Cursor的结果集,通过该结果集可以获得我们查询的结果。
返回值 函数声明
final Uri insert(Uri url, ContentValues values)
final int delete(Uri url, String where, String[] selectionArgs)
final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
final int update(Uri uri, ContentValues values, String where, String[] selectionArgs)
推荐阅读
-
安卓学习 之 ContentResolver内容提供者(七)
-
ContentProvider内容提供者与ContentResolver内容访问者
-
ContentProvider内容提供者 和 ContentResolver内容解析者
-
ContentProvider内容提供者和ContentResolver内容访问者
-
内容解析者ContentResolver,显示短信
-
Android编程使用内容提供者方式(ContentProvider)进行存储的方法
-
Android编程使用内容提供者方式(ContentProvider)进行存储的方法
-
Android 内容提供者刷新图片 和 Arraylist排序
-
ContentProvider内容提供者
-
内容提供者(ContentProvider)