Android4.X数据库的cursor问题
来源:互联网 发布:王者荣耀点卷充值软件 编辑:程序博客网 时间:2024/06/06 01:49
以前一直是在Android2.3平台练习,但是将程序运行在Android4.X平台上时就出现各种问题,不论是网络的还是数据库的,不得不说Android4.X跟Android2.3还是有很大的不同的,在写代码时更要有严谨性,这几天遇到的问题是数据库的cursor问题,将数据库的内容以二级列表的形式显示,并且可单击列表查看详细信息,即在Activity A中显示列表,当单击某一个子列表时进入Activity B来显示详细信息,用cursor存储从数据库得到的数据。问题表现为:当从Activity B返回到Activity A时,程序异常退出
FATAL EXCEPTION: mainjava.lang.RuntimeException: Unable to resume activity {***}: java.lang.IllegalStateException: trying to requery an already closed cursor android.database.sqlite.SQLiteCursor@411c86d0at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2568)at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2596)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:137)at android.app.ActivityThread.main(ActivityThread.java:4586)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:511)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)at dalvik.system.NativeStart.main(Native Method)Caused by: java.lang.IllegalStateException: trying to requery an already closed cursor android.database.sqlite.SQLiteCursor@411c86d0at android.app.Activity.performRestart(Activity.java:4508)at android.app.Activity.performResume(Activity.java:4531)at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2558)
网上查找了一下,说是startManagingCursor()函数的问题,在Build.VERSION.SDK_INT小于11时用这个函数没有问题,当大于11时,就不用这个函数了,因此,按照网上的代码,覆写startManagingCursor(Cursor c)函数,如下:
@Overridepublic void startManagingCursor(Cursor c) { // To solve the following error for honeycomb: // java.lang.RuntimeException: Unable to resume activity // java.lang.IllegalStateException: trying to requery an already closed cursor if (Build.VERSION.SDK_INT < VersionUtil.HONEYCOMB) { super.startManagingCursor(c); }}满怀希望地运行代码,结果又出现了其他问题
05-17 11:11:03.163: E/StrictMode(27580): Finalizing a Cursor that has not been deactivated or closed. 05-17 11:11:03.163: E/StrictMode(27580): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here05-17 11:11:03.163: E/StrictMode(27580): at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:99)05-17 11:11:03.163: E/StrictMode(27580): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:51)05-17 11:11:03.163: E/StrictMode(27580): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)05-17 11:11:03.163: E/StrictMode(27580): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1449)05-17 11:11:03.163: E/StrictMode(27580): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1405)05-17 11:11:03.163: E/StrictMode(27580): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1485)
纠结的根源还是cursor的问题,又查看了下跟cursor有关的代码,看不出有啥问题,最后觉得应该是Activity切换的问题,跟二级列表有关,解决办法是在从Activity A切换到Activity B时调用stopManagingCursor(cursor)函数,切换回Activity A时再重新获取cursor,并管理。不知各位有啥更好的办法解决。。。
- Android4.X数据库的cursor问题
- 数据库使用游标(Cursor)的问题
- Android数据库操作查询中Cursor类的问题
- 关于开发工具无法连接android4.x机子的问题
- cursor遍历的问题
- Mac OS X 10.8.X编译Android4.2.X源码不生成emulator的问题
- 分布式引起的cursor: pin S wait on X 事件问题处理
- 解决Oracle数据库返回cursor问题
- CursorAdapter的Cursor关闭问题
- 在android4.x中使用自定义的webview中出现ZOOM崩溃的问题
- 关于在android4.1.x的版本不能启动支付宝问题
- android4.4 evaluateJavascript 到android2.X上不能调用的问题
- 关于网上解决Android4.x系统设置字体大小导致应用布局混乱引起的问题
- Android数据库使用cursor的注意事项!
- 关于数据库的游标(cursor)。
- Android SQLite数据库查询 cursor的使用
- cursor循环查询数据库里的内容
- Cursor 数据库查询游标的应用
- 通过vb修改windows桌面背景
- 【Thinkphp教程】URL重写
- 第2章 理解memcached的内存存储
- javascript replace的使用
- rational_perm破解
- Android4.X数据库的cursor问题
- android EditText输入限制
- 【Thinkphp教程】 如何实现URL伪静态
- rabbitmq on android常见问题
- jQuery基础知识,很赞的!!!
- PHP应用 explode()函数
- 【Thinkphp教程】 如何进行模块分组
- Android 中设置只是程序第一次运行才显示的界面
- 【jiasuba】WindowsXP升级Windows7过程中时出现了问题