Contentprovider的基本用法
16lz
2021-01-26
在前两年的开发中我们是很少看到ContentProvider的情况,但随着社会的进步数据化的东西越来越多,进而需要各种数据访问也就越来越多。android提供了ContentProvider来应对不同应用间的数据访问。下面我们就对ContentProvider进行一个简单的用法介绍;
在数据存储端
- 继承ContentPovider;
- AndroidManifest.xml中配置;
- 在ContentProvider中匹配访问地址的正确性;
- 得到ContentResolver传递过来的参数;(与第6步对应)
- 操作数据库;
数据访问端;
6.ContentResolver传递Uri地址,以及要操纵数据库CRUD的对应参数给ContentProvider的CRUD方法;(与第3.4步对应)
我们根据上面的思路来一一实现
首先继承ContentProvider重写对应的方法;
public class ContentProvideDemo extends ContentProvider { private static final String TAG = ContentProvideDemo.class.getSimpleName(); @Override public boolean onCreate() { return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Log.d(TAG, "query: enter"); System.out.print("uri = " + uri); return null; } @Override public String getType(Uri uri) { Log.d(TAG, "getType: enter"); return null; } @Override public Uri insert(Uri uri, ContentValues values) { Log.d(TAG, "insert: enter"); return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { Log.d(TAG, "delete: enter"); return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.d(TAG, "update: enter"); return 0; }}
AndroidManifest.xml中配置;
android:name=".ContentProvideDemo" android:authorities="com.example.concentrated"android:exported="true"/>//这里的authorities相当于协议。//exported="true"表示能被外界访问;
在ContentProvider中匹配访问地址的正确性;
private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); static { //为UriMatcher注册两个Uri; /* String authority, 协议也就是AndroidManifaset.xml文件中配置的authority; String path,与authority组成一个uri 这里都是自己给出的,因为uri的地址是自己创建的; int code,code为uri的标示码; */ matcher.addURI("com.example.concentrated", "words", 6); //#号为通配符; matcher.addURI("com.example.concentrated", "word/#", 3); //下面说面下这两种配法的意思 /*第一种为标准写法,为常用状态。也就是说当ContentResolver的Uri中的id与addURI中的code一至时才返回code 值不然就返回-1; 第二种,#号为通配符。ContentResolver的Uri中的id不管是什么值,都会返回addURI中的code值; */ }
得到ContentResolver传递过来的参数;(与第6步对应)
操作数据库;
ContentResolver传递Uri地址,以及要操纵数据库CRUD的对应参数给ContentProvider的CRUD方法;(与第3.4步对应)
//在ContentResolver中uri的ID值有两种方法//方法一:Uri uri = Uri.parse("content://com.example.concentrated/words/6");//方法二:通过ContentUris的API方法添加id值;Uri mUri = Uri.parse("content://com.example.concentrated/words");Uri uri = ContentUris.withAppendedId(mUri, 6);//ContentUris也可以对uri的id值进行解析;long wordId = ContenUris.parseId(uri);//获得结果为6;
更多相关文章
- Android回顾/Intent的使用
- 2020-08-31 2020常用面试题
- android 图片下载方法总结
- 深入分析Android消息机制工作过程--Handler,Looper,MessageQueue
- Android在真机调试的设置方法
- Android:ViewPage最详细的使用教程
- Android中实现ScrollView的滚动事件监听
- android 4.4以上实现沉浸式状态栏
- Android处理Home键方法小结