ContentProvider内容提供者 和 ContentResolver内容解析者
来源:互联网 发布:java微信开发教程csdn 编辑:程序博客网 时间:2024/06/05 14:08
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)
- ContentProvider 和ContentResolver内容提供者和内容解析者
- 内容提供者ContentProvider和内容解析者ContentResolver
- ContentProvider内容提供者 和 ContentResolver内容解析者
- 内容提供者ContentProvider和内容解析者ContentResolver
- 内容提供者ContentProvider和内容解析者ContentResolver
- 内容提供者ContentProvider和内容解析者ContentResolver
- ContentProvider内容提供者 和 ContentResolver内容访问者
- ContentProvider内容提供者和ContentResolver内容访问者
- ContentProvider内容提供者和ContentResolver内容访问者
- ContentProvider内容提供者和ContentResolver内容访问者
- 关于Android sqlite3数据库创建使用内容提供者contentProvider及解析者ContentResolver,观察者ContentResolver案例
- Android 中ContentProvider内容提供者和ContentResolver内容访问者
- Android:内容提供者(ContentProvider)和内容访问者(ContentResolver)
- ContentProvider内容提供者与ContentResolver内容访问者
- Android----ContentProvider(内容提供者) ContentResolver(内容访问者)
- ContentProvider内容提供者与ContentResolver内容访问者
- ContentProvider内容提供者与ContentResolver内容访问者
- Android ContentProvider(内容提供者{模拟底层})和Contentresolver(内容接受者{实现对ContentProvider数据的修改})
- css3选择器
- 用Redis bitmap统计活跃用户、留存
- Arduino分割字符串
- Java多线程基础解析
- Linux命令行刻录光盘、光盘转ISO文件、校验光盘
- ContentProvider内容提供者 和 ContentResolver内容解析者
- fat文件系统
- 搭建完全分布式Hadoop(二)
- 图片轮播效果
- JSeckill-一个可以让你秒射的极速开发框架
- 用c语言实现的字符串升序排序
- 阿里云访问出现OneinStack
- 深入理解 Android 卷I
- 大敏捷之我见