异常:android.database.StaleDataException: Attempted to access a cursor after it has been closed
2016-07-04 22:41
1546 查看
1.老规矩,贴报错信息:
2.分析:
1.根据报错信息的提示: “是由于我尝试访问已经关闭的cursor而报的异常”,在网上查找了相关异常的 资料,最后经过测试,终于确定了该异常的发生原因以及解决方案!
2.那么首先截图下某位大神的博客,再附上其博客网址:
参考的博客网址:http://blog.csdn.net/lovexieyuan520/article/details/12837899
http://hzhuzhiyu.blog.163.com/blog/static/167972388201491143958532/
3.解决:
1.首先定位错误: “cursor.close();”具体在相关操作的那部分代码里引用了;
2.将 “cursor.close()” 改为如下形式;
3.但是又在试验中发现了另一问题.
我们查询数据库的时候,是不是可以使用如下两个Api进行查询
那么问题就来了,我发现在使用上面第2个Api查询数据库的时候,在 “cursor.close();” 不做判断版本是否小于14的操作,并不会发生异常,而使用第一个Api就发生异常了,这我就郁闷了
4.解惑:后来看到一篇博客这样写着
5.总结:
1.注意查询数据库的这两个Api的正确close方式;
2.关于cursor,之后有时间的话会对其充分的研究
Unable to resume activity {com.hy.gzh/com.hy.gzh.ui.activity.workcircle.SendDynamicActivity}: android.database.StaleDataException: Attempted to access a cursor after it has been closed. at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3035) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3064) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5314) ... Caused by: android.database.StaleDataException: Attempted to access a cursor after it has been closed. at android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed(BulkCursorToCursorAdaptor.java:64) at android.database.BulkCursorToCursorAdaptor.requery(BulkCursorToCursorAdaptor.java:133) at android.database.CursorWrapper.requery(CursorWrapper.java:186) ...
2.分析:
1.根据报错信息的提示: “是由于我尝试访问已经关闭的cursor而报的异常”,在网上查找了相关异常的 资料,最后经过测试,终于确定了该异常的发生原因以及解决方案!
2.那么首先截图下某位大神的博客,再附上其博客网址:
参考的博客网址:http://blog.csdn.net/lovexieyuan520/article/details/12837899
http://hzhuzhiyu.blog.163.com/blog/static/167972388201491143958532/
3.解决:
1.首先定位错误: “cursor.close();”具体在相关操作的那部分代码里引用了;
2.将 “cursor.close()” 改为如下形式;
if(Build.VERSION.SDK_INT<14){ //在android 4.0及其以上的版本中,Cursor会自动关闭,不需要用户自己关闭 cursor.close(); }
3.但是又在试验中发现了另一问题.
我们查询数据库的时候,是不是可以使用如下两个Api进行查询
1.context.managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, videoColumns,null, null, null); ------------------------------------------------------------------- 2.viedoCursor = context.getContentResolver().query (MediaStore.Video.Media.EXTERNAL_CONTENT_URI, videoColumns);
那么问题就来了,我发现在使用上面第2个Api查询数据库的时候,在 “cursor.close();” 不做判断版本是否小于14的操作,并不会发生异常,而使用第一个Api就发生异常了,这我就郁闷了
4.解惑:后来看到一篇博客这样写着
截图: ![这里写图片描述](https://img-blog.csdn.net/20160704224108981) 博客网址:http://www.cnblogs.com/yushiro/archive/2013/05/17/3084278.html
5.总结:
1.注意查询数据库的这两个Api的正确close方式;
2.关于cursor,之后有时间的话会对其充分的研究
相关文章推荐
- android-Paint
- android-Rect
- android-Canvas
- In android studio,cannot load 2 facets-unknown facet type
- Android使用ScrollView+ListView时发生滑动冲突的解决办法
- Android酷炫动画效果之进度加载动画
- android基本控件的使用
- android studio安装
- android studio for android learning (十一) 利用bundle在activity之间进行数据传递示例
- Android开发最佳实践(未完待译)
- 【Android开发—电商系列】(三):缓存的使用
- Android数据库框架ORMLite的学习笔记
- Android Canvas drawArc方法介绍
- 我对MVC和MVP的一些理解
- Android--启动另一个Activity并返回结果
- Android framwork 分析之智能指针LightRefBase ,sp,wp,RefBase
- Android BT STACK BTU 和 HCI之间的消息传递
- Android-Linkify的使用
- 一个新的开始,用博客记录自己的成长
- 【Android开发—电商系列】(二):仿淘宝商品属性标签页