Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid list view with simplecursor adapter crashes application (No ANR shown)
    text
    copied!<p>I have a weird problem with listview, while using simplecursor adapter. Here is the error</p> <pre><code>08-31 21:50:14.540: INFO/dalvikvm(12195): Uncaught exception thrown by finalizer (will be discarded): 08-31 21:50:14.540: INFO/dalvikvm(12195): java.lang.IllegalStateException: Binder has been finalized! 08-31 21:50:14.540: INFO/dalvikvm(12195): at android.os.BinderProxy.transact(Native Method) 08-31 21:50:14.540: INFO/dalvikvm(12195): at android.database.BulkCursorProxy.close(BulkCursorNative.java:289) 08-31 21:50:14.540: INFO/dalvikvm(12195): at android.database.BulkCursorToCursorAdaptor.close(BulkCursorToCursorAdaptor.java:141) 08-31 21:50:14.540: INFO/dalvikvm(12195): at android.database.CursorWrapper.close(CursorWrapper.java:43) 08-31 21:50:14.540: INFO/dalvikvm(12195): at android.content.ContentResolver$CursorWrapperInner.close(ContentResolver.java:1575) 08-31 21:50:14.540: INFO/dalvikvm(12195): at android.content.ContentResolver$CursorWrapperInner.finalize(ContentResolver.java:1586) 08-31 21:50:14.540: INFO/dalvikvm(12195): at dalvik.system.NativeStart.run(Native Method) </code></pre> <p>I have runQueryOnBackgroundThread implemented in my cursorAdapter, which is invoked by the Filter.filter method call from the activity. So I dont have any reference of the cursor in my activity. Everytime I query I understand I get cursor changed callback in my cursor adapter, which extends SimpleCursorAdapter</p> <p>Here is how it looks</p> <pre><code>public void changeCursor(Cursor cursor) { Log.d(TAG, "Cursor changed ... **************** "+ cursor); if (cursor != null) { setLoading(false); } super.changeCursor(cursor); initSectionHeaders(cursor); notifyDataSetChanged(); } </code></pre> <p><code>runQueryOnBackgroundThread()</code> just returns a cursor from a query.</p> <p>Am I missing something, should the cursor be closed or managed anywhere? Any help on the leads would greatly help. Thanks in advance.</p> <p><em><strong></em>**UPDATE*<em>*</em></strong> Snippets of my adapter </p> <pre><code>public Cursor runQueryOnBackgroundThread(CharSequence constraint) { Log.d(TAG, "runQueryOnBackgroundThread "+ constraint); if (getFilterQueryProvider() != null) { return getFilterQueryProvider().runQuery(constraint); } return doQuery(constraint, People.CONTENT_URI); } private Cursor doQuery(CharSequence constraint, Uri queryUri){ StringBuilder selectionStrBuilder = new StringBuilder(); String selectionArgs[] = null; String selection = null; if(constraint!=null){ //ADDING GLOB so that the sql query can interpret linux style wildcards selectionStrBuilder.append("(UPPER(").append(People.DISPLAY_NAME).append(") GLOB ?)"); selection = selectionStrBuilder.toString(); String constraintStr = constraint.toString().toUpperCase(); //prepend and append '*' - TODO improve constraintStr = "*"+ constraintStr; constraintStr +="*"; selectionArgs = new String[]{constraintStr}; } ContentResolver contentRes = context.getContentResolver(); return contentRes.query(queryUri, null, selection, selectionArgs, People.DISPLAY_NAME); } </code></pre> <p>Other than these two functions I have changeCursor overridden as posted earlier and use the cursor in bind view to get the data. I don't close or modify cursor properties anywhere else. </p> <p>My provider getQuery function looks like</p> <pre><code>SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy); // Tell the cursor what uri to watch, // so it knows when its source data changes c.setNotificationUri(getContext().getContentResolver(), uri); return c; </code></pre> <p><strong>UPDATE2*</strong></p> <p>When I run the same program on the emulator I get this stack trace, which is very different from what I see on the tablet.</p> <pre><code>01-03 17:21:44.130: ERROR/IMemory(9328): binder=0x3891a0 transaction failed fd=-2147483647, size=0, err=-2147483646 (Unknown error: 2147483646) 01-03 17:21:44.130: ERROR/IMemory(9328): cannot dup fd=-2147483647, size=0, err=-2147483646 (Bad file number) 01-03 17:21:44.130: ERROR/IMemory(9328): cannot map BpMemoryHeap (binder=0x3891a0), size=0, fd=-1 (Bad file number) 01-03 17:21:44.130: WARN/dalvikvm(9328): JNI WARNING: JNI method called with exception raised 01-03 17:21:44.130: WARN/dalvikvm(9328): in Ldalvik/system/NativeStart;.run ()V (CallStaticVoidMethodV) 01-03 17:21:44.130: WARN/dalvikvm(9328): Pending exception is: 01-03 17:21:44.130: INFO/dalvikvm(9328): Ljava/lang/RuntimeException;: No memory in memObj 01-03 17:21:44.130: INFO/dalvikvm(9328): at android.database.CursorWindow.native_init(Native Method) 01-03 17:21:44.130: INFO/dalvikvm(9328): at android.database.CursorWindow.&lt;init&gt;(CursorWindow.java:518) 01-03 17:21:44.130: INFO/dalvikvm(9328): at android.database.CursorWindow.&lt;init&gt;(CursorWindow.java:27) 01-03 17:21:44.130: INFO/dalvikvm(9328): at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:493) 01-03 17:21:44.130: INFO/dalvikvm(9328): at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:491) 01-03 17:21:44.130: INFO/dalvikvm(9328): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:103) 01-03 17:21:44.130: INFO/dalvikvm(9328): at android.os.Binder.execTransact(Binder.java:320) 01-03 17:21:44.130: INFO/dalvikvm(9328): at dalvik.system.NativeStart.run(Native Method) 01-03 17:21:44.130: INFO/dalvikvm(9328): "Binder Thread #3" prio=5 tid=9 NATIVE 01-03 17:21:44.130: INFO/dalvikvm(9328): | group="main" sCount=0 dsCount=0 obj=0x405de828 self=0x8e288 01-03 17:21:44.130: INFO/dalvikvm(9328): | sysTid=9336 nice=0 sched=0/0 cgrp=[fopen-error:24] handle=959480 01-03 17:21:44.130: INFO/dalvikvm(9328): at dalvik.system.NativeStart.run(Native Method) 01-03 17:21:44.130: ERROR/dalvikvm(9328): VM aborting </code></pre> <p>And Crashes the application. </p> <p>I found a bug report on this issue <a href="http://code.google.com/p/android/issues/detail?id=10614" rel="nofollow" title="Click for bug report">here</a> </p> <p>Anyone faced the same problem? Any help would be appreciated. Thanks </p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload