一、Android的ContentProvider对外共享数据
Android的ContentProvider应用非常广泛,几乎每一个andriod项目中都会对外提供接口用来操作数据库。ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider 对你应用中的数据进行添删改查。
关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_READABLE 或Context.MODE_WORLD_WRITEABLE同样也可以对外共享数据。那么,这里为何要使用ContentProvider 对外共享数据呢?是这样的,如果采用文件操作模式对外共享数据,数据的访问方式会因数据存储的方式而不同,导致数据的访问方式无法统一,如:采用xml文件对外共享数据,需要进行xml解析才能读取数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读取数据。使用ContentProvider对外共享数据的好处是统一了数据的访问方式。
当应用需要通过ContentProvider对外共享数据时,第一步需要继承ContentProvider并重写下面方法:
// 匹配路径int result = uriMatcher.match(uri);switch (result) {case QUERY_USER:// 符合:content://cn.com.liveuc.sqlite.userprovider/user,代表查询所有的数据Cursor cursor = null;SQLiteDatabase sd = db.getReadableDatabase();if (sd.isOpen()) {cursor = sd.rawQuery("select id as _id,username,password from user", null);}return cursor;case QUERY_USER_ID:// 符合:content://cn.com.liveuc.sqlite.userprovider/user/id,代表查询所有的数据long id = ContentUris.parseId(uri); // 获取uri最后的idSQLiteDatabase sd2 = db.getReadableDatabase();if (sd2.isOpen()) {Cursor cursor2 = sd2.query("user", null, "id=?",new String[] { id + "" }, null, null, null, null);return cursor2;}default:Log.e(TAG, "路径不被是别");throw new IllegalArgumentException("路径不被识别");}