问题描述
我有一个奇怪的问题列表视图,同时采用simplecursor适配器。以下是错误
I have a weird problem with listview, while using simplecursor adapter. Here is the error
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)
我已runQueryOnBackgroundThread在我的CursorAdapter,这是由从该活动的Filter.filter方法调用来调用实现。所以,我没有光标在我活动的任何引用。每次我查询我的理解,我得到光标在我的鼠标适配器,它扩展SimpleCursorAdapter改变回调
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
下面是它的外观
public void changeCursor(Cursor cursor) {
Log.d(TAG, "Cursor changed ... **************** "+ cursor);
if (cursor != null) {
setLoading(false);
}
super.changeCursor(cursor);
initSectionHeaders(cursor);
notifyDataSetChanged();
}
runQueryOnBackgroundThread()
只返回游标从查询。
runQueryOnBackgroundThread()
just returns a cursor from a query.
我失去了一些东西,如果游标被关闭或托管的任何地方?对线索任何帮助将极大地帮助。先谢谢了。
Am I missing something, should the cursor be closed or managed anywhere? Any help on the leads would greatly help. Thanks in advance.
的**更新*的 * 的我的适配器的片段
**UPDATE** Snippets of my adapter
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);
}
除了这两个功能是发布较早,使用光标在绑定视图来获取数据我已经changeCursor覆盖。我不关闭或修改光标属性其他地方。
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.
我的供应商getQuery功能看起来像
My provider getQuery function looks like
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;
UPDATE2 *
当我运行在模拟器上我得到这个堆栈跟踪,这是从我在平板电脑上看到非常不同的相同的程序。
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.
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.<init>(CursorWindow.java:518)
01-03 17:21:44.130: INFO/dalvikvm(9328): at android.database.CursorWindow.<init>(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
和应用程序崩溃。
我发现在这个问题上的错误报告的
I found a bug report on this issue here
任何人都面临同样的问题?任何帮助将是AP preciated。谢谢
Anyone faced the same problem? Any help would be appreciated.Thanks
推荐答案
啊终于找到了SOLN这一再用问题。只是有些光标在框架中的其他部分是开放的。当关闭工作。
Ah finally found a soln to this freaking issue. Just that some cursor in some other part of the framework was open. Works when closed.
这篇关于Android的列表视图simplecursor适配器崩溃的应用程序(不显示ANR)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!