简介

内容提供者为应用程序提供内容,它封装数据并通过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 sqlite 数据库操作
  2. Android 自定义Listview 如何绑定Sqlite数据库数据
  3. Android的数据存储
  4. Android心得3.2--用SAX解析器解析xml文件内容
  5. Android APN的设置问题 默认“已起用数据” 关闭
  6. Android如何下抓取tcp数据包
  7. 学习笔记(01):FFmpeg打造Android万能音频播放器-OpenSL ES介绍并
  8. Android ContentProvider实现应用间数据共享

随机推荐

  1. 如何自学 Android 编程?(励志)
  2. Android(安卓)- 文件读写操作 总结
  3. android发现之旅之ViewRootImpl,Activity
  4. 谷歌推出新操作系统Andromeda,那Android真
  5. Android(安卓)Location服务之Geocoder
  6. Android USB状态监控(解决scheme="file")
  7. Android高手进阶教程(五)之----Android(
  8. Android夜间模式实现,通过在window上加一
  9. launcher修改--获取屏幕缩略(预览)图
  10. 加速Android(安卓)Studio/Gradle构建