首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回空的IllegalArgumentException游标后,SQLite和“撤消后仍然挂起的线程”

返回空的IllegalArgumentException游标后,SQLite和“撤消后仍然挂起的线程”
EN

Stack Overflow用户
提问于 2014-03-13 13:32:31
回答 1查看 875关注 0票数 1

当运行我的安卓应用程序时,ContentProvider返回一个空的SQLite游标(零行)。这将导致dalvikvm在LogCat中输出以下消息:

代码语言:javascript
复制
threadid=1 still suspended after undo (sc=1 dc=1)

Eclipse中的调试选项卡显示了以下异常:

代码语言:javascript
复制
Thread [<1> main] (Suspended (exception IllegalArgumentException))  
    <VM does not provide monitor information>   
    AsyncTaskLoader$LoadTask.onPostExecute(Object) line: 63 
    AsyncTaskLoader$LoadTask(ModernAsyncTask).finish(Object) line: 461  
    ModernAsyncTask.access$500(ModernAsyncTask, Object) line: 47    
    ModernAsyncTask$InternalHandler.handleMessage(Message) line: 474    
    ModernAsyncTask$InternalHandler(Handler).dispatchMessage(Message) line: 99  
    Looper.loop() line: 213 
    ActivityThread.main(String[]) line: 5225    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 525  
    ZygoteInit$MethodAndArgsCaller.run() line: 741  
    ZygoteInit.main(String[]) line: 557 
    NativeStart.main(String[]) line: not available [native method]

我已经记录了OffersDatabaseHelper.OffersDatabaseHelper类中的每个操作。方法query将光标返回给android.content.ContentProvider的方法query,这似乎是问题的原因。

LogCat输出:

代码语言:javascript
复制
03-13 14:12:20.116: I/System.out(2521): Sending WAIT chunk
03-13 14:12:20.116: I/dalvikvm(2521): Debugger is active
03-13 14:12:20.316: I/System.out(2521): Debugger has connected
03-13 14:12:20.316: I/System.out(2521): waiting for debugger to settle...
03-13 14:12:20.516: I/System.out(2521): waiting for debugger to settle...
03-13 14:12:20.716: I/System.out(2521): waiting for debugger to settle...
03-13 14:12:20.916: I/System.out(2521): waiting for debugger to settle...
03-13 14:12:21.117: I/System.out(2521): waiting for debugger to settle...
03-13 14:12:21.317: I/System.out(2521): waiting for debugger to settle...
03-13 14:12:21.517: I/System.out(2521): debugger has settled (1311)
03-13 14:12:21.537: V/OffersContentProvider(2521): onCreate called
03-13 14:12:21.537: I/OffersContentProvider(2521): setting context
03-13 14:12:21.537: I/OffersContentProvider(2521): setting dbHelper
03-13 14:12:21.537: I/OffersContentProvider(2521): initiating OffersDatabaseHelper
03-13 14:12:21.537: V/OffersContentProvider(2521): OffersDatabaseHelper.OffersDatabaseHelper called
03-13 14:12:21.557: I/OffersContentProvider(2521): Returning if offersDB is null
03-13 14:12:21.557: D/OffersContentProvider(2521): false
03-13 14:12:21.937: V/OffersContentProvider(2521): query called
03-13 14:12:21.977: I/OffersContentProvider(2521): CallerClassName=android.content.ContentProvider , Caller method name: query
03-13 14:12:21.987: I/OffersContentProvider(2521): Callee method name: query
03-13 14:12:21.987: D/OffersContentProvider - query - uri(2521): content://com.example.provider.offers/offers
03-13 14:12:21.997: D/OffersContentProvider - query - projection(2521): [offer_id, offer_title, offer_description, offer_distance, offer_icon, offer_reference]
03-13 14:12:22.007: D/OffersContentProvider - query - selection(2521): null
03-13 14:12:22.007: D/OffersContentProvider - query - selectionArgs(2521): null
03-13 14:12:22.007: D/OffersContentProvider - query - sort(2521): null
03-13 14:12:22.007: I/OffersContentProvider(2521): Instantiating SQLiteQueryBuilder with table offers
03-13 14:12:22.017: I/OffersContentProvider(2521): Instantiating SQLIteQueryBuilder succesful
03-13 14:12:22.017: I/OffersContentProvider(2521): Trying to match uri with 2
03-13 14:12:22.027: I/OffersContentProvider(2521): Could not match with uri
03-13 14:12:22.027: D/OffersContentProvider(2521): 1
03-13 14:12:22.027: I/OffersContentProvider(2521): Preparing orderBy
03-13 14:12:22.027: I/OffersContentProvider(2521): sort is empty, orderBy will be offer_distance ASC
03-13 14:12:22.027: I/OffersContentProvider(2521): Preparing to query the underlying database
03-13 14:12:22.027: D/libEGL(2521): loaded /vendor/lib/egl/libEGL_adreno.so
03-13 14:12:22.027: D/libEGL(2521): loaded /vendor/lib/egl/libGLESv1_CM_adreno.so
03-13 14:12:22.027: I/OffersContentProvider(2521): Querying underlying database successful
03-13 14:12:22.038: I/OffersContentProvider(2521): Dumping cursor
03-13 14:12:22.038: D/libEGL(2521): loaded /vendor/lib/egl/libGLESv2_adreno.so
03-13 14:12:22.038: D/OffersContentProvider(2521): android.database.sqlite.SQLiteCursor@41b8afa0
03-13 14:12:22.038: I/Adreno-EGL(2521): <qeglDrvAPI_eglInitialize:316>: EGL 1.4 QUALCOMM build:  (CL4169980)
03-13 14:12:22.038: I/Adreno-EGL(2521): OpenGL ES Shader Compiler Version: 17.01.10.SPL
03-13 14:12:22.038: I/Adreno-EGL(2521): Build Date: 12/01/13 Sun
03-13 14:12:22.038: I/Adreno-EGL(2521): Local Branch: 
03-13 14:12:22.038: I/Adreno-EGL(2521): Remote Branch: 
03-13 14:12:22.038: I/Adreno-EGL(2521): Local Patches: 
03-13 14:12:22.038: I/Adreno-EGL(2521): Reconstruct Branch: 
03-13 14:12:22.038: D/OffersContentProvider(2521): Cursor has 0 rows
03-13 14:12:22.038: I/OffersContentProvider(2521): Returing cursor
03-13 14:12:22.078: D/OpenGLRenderer(2521): Enabling debug mode 0
03-13 14:12:23.069: D/dalvikvm(2521): threadid=1: still suspended after undo (sc=1 dc=1)

杂项详情:

  • 这个问题既发生在虚拟设备上,也发生在我正在测试的索尼Xperia Z上。
  • Android min-sdk = 11,target-sdk = 19

任何关于如何解决这个问题的意见都是非常欢迎的,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-13 15:09:50

在继续挖掘之后,我刚刚发现了造成这个问题的原因。调试器显示,SQLite给了我一个例外,告诉我字段_id不存在,wich对我来说是个很大的惊喜,因为我的主键不是_id

由于阿尔·萨顿的回答提出了一个不同的问题,我意识到我表中的主字段与SQLiteOpenHelper所需的/不一样

将主字段改为_id解决了我的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22380228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档