四大组件之ContentProvider(内容观察者)&数据库
来源:互联网 发布:abbplc编程软件序列号 编辑:程序博客网 时间:2024/06/13 10:13
ContentProvider 如何实现数据共享
Android 中如果想将自己应用的数据(一般多为数据库中的数据)提供给第三发 app,那么我们只能通过 ContentProvider 来实现
ContentProvider 是应用程序之间共享数据的接口. 使用的时候首先自定义一个类继承 ContentProvider,然后覆写
query
、insert
、update
、delete
等方法. 最后别忘了作为 android 四大组件之一必须在 AndroidManifest 文件中进行注册
<provider android:exported="true" android:name="cc.catface.contenProvider.provider.PersonContentPro vider" android:authorities="cc.catface.person" />
- 第三方 app 可以通过 ContentResolver 类来访问该 Provider
为什么要用 ContentProvider? 它和 sql 的实现上有什么差别?
ContentProvider 屏蔽了数据存储的细节,内部实现对用户完全透明,用户只需要关心操作数据的 uri 就可以了,ContentProvider 可以实现不同 app 之间共享
Sql 也有增删改查的方法,但是 sql 只能查询本应用下的数据库. 而 ContentProvider 还可以去增删改查本地 .xml 文件的读取等
ContentProvider、ContentResolver、ContentObserver 之间的关系
ContentProvider:内容提供者,用于对外提供数据
ContentResolver.notifyChange(uri)
:发出消息
ContentResolver:内容解析者,用于获取内容提供者提供的数据
ContentObserver:内容监听器,可以监听数据的改变状态
ContentResolver.registerContentObserver()
:监听消息
如何访问 asserts 资源目录下的数据库?
// 获取到 assert 目录下的 db 文件AssetManager assetManager = getAssets(); InputStream is = assetManager.open("myuser.db"); // 将文件拷贝到 /data/data/cc.catface.android.asserts.sqlite/databases/myuser.db // 如果 databases 目录不存在则创建File file = new File("/data/data/cc.catface.android.asserts.sqlite/databases"); if (!file.exists()) { file.mkdirs();}FileOutputStream fos = new FileOutputStream(new File(file, "myuser.db")); byte[] buff = new byte[1024 * 8];int len = -1;while((len = is.read(buff)) != -1){ fos.write(buff, 0, len);}fos.close();is.close();
// 访问数据库SQLiteDatabase database = openOrCreateDatabase("myuser.db", MODE_PRIVATE, null);String sql = "select c_name from t_user"; Cursor cursor = database.rawQuery(sql, null); while(cursor.moveToNext()){ String string = cursor.getString(0); Log.d("tag", string); }cursor.close();database.close();
如何在高并发下进行数据库查询
(回答广泛,可自由发挥) 比如:不要关联多表查询,减少链接时间,创建索引、将查询到的数据采用缓存策略等等
1 0
- 四大组件之ContentProvider(内容观察者)&数据库
- Android四大组件之内容提供者--ContentProvider
- Android四大组件之内容提供者ContentProvider
- 四大组件之内容提供者ContentProvider
- Android四大组件之内容提供者--ContentProvider
- 四大组件之contentProvider内容监听者
- 四大组件之contentProvider简单数据库
- 四大组件之contentProvider联系人数据库DIY
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- 四大组件之ContentProvider
- ADO.NET-如何选择一个合适的Data Provider
- Java集合类
- [模板] 树状数组
- NoSQL经典应用
- Hadoop中MapTask的并行度的决定机制
- 四大组件之ContentProvider(内容观察者)&数据库
- 123123
- C++(多态实现原理)函数重写,重载,重定义
- pandas库中数据结构DataFrame的绘制函数
- day02-10仿搜索框及下拉列表
- 优化String.split引起的效率问题
- 树莓派开机启动python脚本
- UVA 1632 Alibaba(区间dp)
- 希尔排序详解