在前两年的开发中我们是很少看到ContentProvider的情况,但随着社会的进步数据化的东西越来越多,进而需要各种数据访问也就越来越多。android提供了ContentProvider来应对不同应用间的数据访问。下面我们就对ContentProvider进行一个简单的用法介绍;

在数据存储端

  1. 继承ContentPovider;
  2. AndroidManifest.xml中配置;
  3. 在ContentProvider中匹配访问地址的正确性;
  4. 得到ContentResolver传递过来的参数;(与第6步对应)
  5. 操作数据库;

数据访问端;

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;

更多相关文章

  1. Android回顾/Intent的使用
  2. 2020-08-31 2020常用面试题
  3. android 图片下载方法总结
  4. 深入分析Android消息机制工作过程--Handler,Looper,MessageQueue
  5. Android在真机调试的设置方法
  6. Android:ViewPage最详细的使用教程
  7. Android中实现ScrollView的滚动事件监听
  8. android 4.4以上实现沉浸式状态栏
  9. Android处理Home键方法小结

随机推荐

  1. 使用Java解析XML文件以获取名称列表
  2. android listview优化几种写法 详细出处
  3. 使用Android-UIL,如何停止下载?
  4. ViewPager的滑动禁止和滑动启动
  5. android发送通知及更新通知
  6. PacketReader 如何实现smack数据监听机制
  7. 第一个Android程序
  8. android中Appwidget的使用
  9. 在谷歌中映射V2…fragment.getMap()返回n
  10. 不同Android版本设备正确获取屏幕分辨率