android四大组件之一内容提供者contentprovider
2016-07-06 18:14
891 查看
contentprovider是android四大组件之一
作用是把数据暴露给其他应用,通常是把私有数据库的数据暴露给其他应用。
4000
(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new UnsupportedOperationException("Not yet implemented"); }}
作用是把数据暴露给其他应用,通常是把私有数据库的数据暴露给其他应用。
public class PersonProvider extends ContentProvider { public PersonProvider() { } //创建uri匹配器对象 UriMatcher um = new UriMatcher(UriMatcher.NO_MATCH); //检测其他用户传入的uri与匹配器定义好的uri哪条匹配 { um.addURI("com.demo.people", "people", 1); um.addURI("com.demo.people", "teacher", 2); um.addURI("com.demo.people", "people/#", 3); } //主机名携带路径 //删除 @Override public int delete(Uri uri, String selection, String[] selectionArgs) { throw new UnsupportedOperationException("Not yet implemented"); } @Override public String getType(Uri uri) { throw new UnsupportedOperationException("Not yet implemented"); } //此方法供其他应用调用,用于往数据库插入数据 //values:由其他应用传入,用于封装要插入的数据 //uri:内容提供者的地址 @Override public Uri insert(Uri uri, ContentValues values) { if (um.match(uri) == 1) { //插入people表
//所有注册这个uri上的内容提供者都可以收到这个通知 getContext().getContentResolver().notifyChange(uri, null);} else if (um.match(uri) == 2) { //插入teacher表 } else if (um.match(uri) == 3) { //将uri末尾携带的数字取出来 long id=ContentUris.parseId(uri); } else { throw new IllegalArgumentException("有问题哟"); } return uri; } //创建时调用 @Override public boolean onCreate() { return false; } //查询 @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { throw new UnsupportedOperationException("Not yet implemented"); } //更新 @Override public int update
4000
(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new UnsupportedOperationException("Not yet implemented"); }}
<provider android:name=".PersonProvider" android:authorities="com.demo.people" android:enabled="true" android:exported="true"></provider>
//从另一个应用通过ContentProvider插入数据 //拿到ContentResolver ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put("name", "name"); values.put("age", "age"); cr.insert(Uri.parse("content://com.demo.people/teacher"), values); cr.delete(Uri.parse("content://com.demo.people"), "name = ?", new String[]{"demo"}); cr.update(Uri.parse("content://com.demo.people"), values, "name = ?", new String[]{"demo"}); Cursor cursor = cr.query(Uri.parse("content://com.demo.people"), null, null, null, null); while (cursor.moveToNext()) { String name=cursor.getString(1); }
//注册一个内容观察者,监听数据库的改变 //Uri:监听那个uri上的内容提供者的通知 //第二个参数如果是true,那么如果content://com.demo.people/数据库名,上的内容改变都会收到通知。 cr.registerContentObserver(Uri.parse("content://com.demo.people"),true,new MyObserver(new Handler()));
class MyObserver extends ContentObserver{ public MyObserver(Handler handler) { super(handler); } //收到数据改变的通知,此方法会调用 @Override public void onChange(boolean selfChange) { super.onChange(selfChange); } }
相关文章推荐
- android studio 无法编译报错:图片无法识别
- Android中 PopupWindow 与 ListView 结合使用
- Android NDK开发(一)环境搭建
- Android URL scheme
- 差分。。部分更新 android apk
- android 调用系统,群发短信
- android hasSystemFeature函数及系统特性配置
- android 三星手机拍照报错
- Android 性能测试初探
- android关于关闭任意的activity
- android studio配置git
- Android开发规范
- android gridview画分割线,如图:
- Android versionCode与versionName
- 可能是讲解Android事件分发最好的文章
- Android Lint 代码检查工具的使用
- Android内存泄漏的八种可能
- Android 视频开发中如何通过url或者本地视频文件路径获得视频的第一帧图片
- Android 中 AlertDialog的使用
- android 夜间模式设置