managedQuery和getContentResolver这两个方法的原理是什么

sis_ying 2010-10-24 04:53:01


学习了一下ContentProvider,照着书上的例子,写了一个小Demo,主要有三个类ContactList.java,PersonInfo.java,DbAccess.java 第一个类是UI界面Activity,第二个类中定义数据库的字段和Uri,第三个类继承自ContentProvider,主要是数据库的操作。
现在我在ContactList.java添加记录和查询记录,如果直接创建一个DbAccess.java的对象db,然后调用db.insert 和db.query来添加或者查询就会有问题,我看书上的代码,它的查询使用managedQuery,插入是用getContentResolver().insert ,通过跟踪managedQuery我发现这个方法,最终是要调用DbAccess.java 类中的Query方法的,getContentResolver().insert最终是要调用DbAccess.java中的insert方法的,对于这一点我很不解。
managedQuery的原理是什么,为什么会调用到DbAccess.java中的query
getContentResolver这个方法到底是干什么的,为什么getContentResolver().insert会调用DbAccess.java中的insert ??
...全文
4015 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
a26651551 2012-10-29
  • 打赏
  • 举报
回复
好深奥的问题啊。。
sada09 2011-09-01
  • 打赏
  • 举报
回复
没到这个层次啊
wwmldx 2011-08-26
  • 打赏
  • 举报
回复
学习了。但是还没有搞懂。。。
youly 2011-07-12
  • 打赏
  • 举报
回复
又一次学习了!
ylczj 2011-06-28
  • 打赏
  • 举报
回复
呵呵。。。
a343931720 2011-05-05
  • 打赏
  • 举报
回复
看看正解
hacker1125 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zkhhjjcyt 的回复:]
重点这句: However, managedQuery() causes the activity to manage the life cycle of the Cursor. 产生的游标的生命周期和当前activity关联,activity销毁,Cursor销毁...
[/Quote]

正解!managedQuery是同activity,有生命周期。也只有在activity类或者派生类中操作。

zkhhjjcyt 2011-03-23
  • 打赏
  • 举报
回复
重点这句: However, managedQuery() causes the activity to manage the life cycle of the Cursor. 产生的游标的生命周期和当前activity关联,activity销毁,Cursor销毁...
zkhhjjcyt 2011-03-23
  • 打赏
  • 举报
回复
Making the query

To query a content provider, you can use either the ContentResolver.query() method or the Activity.managedQuery() method. Both methods take the same set of arguments, and both return a Cursor object. However, managedQuery() causes the activity to manage the life cycle of the Cursor. A managed Cursor handles all of the niceties, such as unloading itself when the activity pauses, and requerying itself when the activity restarts. You can ask an Activity to begin managing an unmanaged Cursor object for you by calling Activity.startManagingCursor().
zkhhjjcyt 2011-03-23
  • 打赏
  • 举报
回复
getContentResolver是对其他应用程序暴露数据的类似接口的方法...
fengzhigen 2011-03-03
  • 打赏
  • 举报
回复
不懂二楼所说的
hehe1234567_ 2010-11-16
  • 打赏
  • 举报
回复
xiexie
dinjay 2010-10-24
  • 打赏
  • 举报
回复
managedQuery是依赖activity的,只不过里面android又包了一些查询方法而已。
getContentResolver也是一样的,获取cursor后最终修改查询的那些方法都是基本的数据库操作的方法,就是封装了一下,联系人有自己的数据库文件,你当然可以自己去打开那个联系人的数据库文件,然后实现修改等操作,但是这样可能是不安全的,android又包了一些接口,自然有它的道理,应该是做了一些优化和异常的处理吧。

80,488

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧