简介

内容提供者为应用程序提供内容,它封装数据并通过ContentResolver将其提供给应用程序。只有在多个应用间需要共享数据的时候才需要ContentProvider。Android已经为常见的一些数据提供了默认的ContentProvider。

数据提供者

  1. Provider
    ContentProvider需要在AndroidManifest.xml中声明。

        
    说明
    authorities
    ported
    adPermission
    itePermission

    注: ContentProvider的authorities必须是唯一的,两个APP不能声明相同的authorities,否则安装时会报错INSTALL_FAILED_CONFLICTING_PROVIDER

  2. ContentProvider
    继承ContentProvider,实现需要实现的方法(onCreate,getType,insert,delete,update,query)。

        @Override    public boolean onCreate() {        mContext = getContext();        mUserDBHelper = new UserDBHelper(mContext);        db = mUserDBHelper.getWritableDatabase();        mUriMatcher.addURI(AUTHORITIES, PATH, CODE);        return true;    }    @Override    public int delete(Uri uri, String selection, String[] selectionArgs) {        if (isMatch(uri)) {            return db.delete(UserDBHelper.TABLE_USER, selection, selectionArgs);        }        return 0;    }    @Override    public String getType(Uri uri) {        // at the given URI.        return null;    }    @Override    public Uri insert(Uri uri, ContentValues values) {        if (isMatch(uri)) {            long id = db.insert(UserDBHelper.TABLE_USER, null, values);            return ContentUris.withAppendedId(uri, id);        }        return null;    }    @Override    public Cursor query(Uri uri, String[] projection, String selection,                        String[] selectionArgs, String sortOrder) {        if (isMatch(uri)) {            return db.query(UserDBHelper.TABLE_USER, projection, selection, selectionArgs, null, null, sortOrder);        }        return null;    }    @Override    public int update(Uri uri, ContentValues values, String selection,                      String[] selectionArgs) {        if (isMatch(uri)) {            return db.update(UserDBHelper.TABLE_USER, values, selection, selectionArgs);        }        return 0;    }        /**     * 是否是提供的数据访问     * @param uri     * @return     */    private boolean isMatch(Uri uri) {        return CODE == mUriMatcher.match(uri);    }

内容访问者

使用ContentResolver访问数据库,传入内容提供者的Uri。访问ContentProvider所在程序的时候会启动它的Application。

  1. 权限声明
    根据需要在AndroidManifest.xml加入需要的读写权限。
  2. 数据操作
    使用ContentResolver进行insert,delete,update,query操作
    getContentResolver().insert(uri, contentValues);getContentResolver().delete(mUri, "name like ?", new String[]{"visitor%"});getContentResolver().update(mUri, contentValues, "name like ?", new String[]{"visitor%"})getContentResolver().query(mUri, new String[]{"id", "name", "age", "address"}, null, null, null)

更多相关文章

  1. Android的数据存储
  2. [读书笔记]intent.putExtra的使用与原理分析
  3. Android(安卓)自定义Listview 如何绑定Sqlite数据库数据
  4. Android(安卓)开发中使用 SQLite 数据库
  5. 【Android】数据存储之Shared Preferences
  6. Android读写文件
  7. Android(安卓)APN的设置问题 默认“已起用数据” 关闭
  8. Android(安卓)sqlite 数据库操作
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. IOC框架
  2. Android root权限判断
  3. android中利用pull解析xml文件
  4. android 弹出带按钮的对话框
  5. web test LoadRunner Android(安卓)/ APK
  6. Android JNI入门第一篇――HelloWord
  7. Android jetpack Room数据库(一)基本使用
  8. 一个android访问http资源的便捷工具类―
  9. android 应用程序自适应屏幕大小
  10. Android 访问网络连接设置界面