Android 无法从活页夹创建光标窗口
然后在第3行(根据日志),我不时会遇到这个例外(摘录如下):Android 无法从活页夹创建光标窗口,android,cursor,android-cursor,Android,Cursor,Android Cursor,然后在第3行(根据日志),我不时会遇到这个例外(摘录如下): android.database.CursorWindowAllocationException:无法从活页夹创建光标窗口。 位于android.database.CursorWindow(CursorWindow.java:134) 位于android.database.CursorWindow(CursorWindow.java:41) 位于android.database.CursorWindow$1.createFromPar
android.database.CursorWindowAllocationException:无法从活页夹创建光标窗口。
位于android.database.CursorWindow(CursorWindow.java:134)
位于android.database.CursorWindow(CursorWindow.java:41)
位于android.database.CursorWindow$1.createFromParcel(CursorWindow.java:709)
位于android.database.CursorWindow$1.createFromParcel(CursorWindow.java:707)
位于android.database.CursorWindow.newFromParcel(CursorWindow.java:718)
位于android.database.BulkCursorProxy.getWindow(BulkCursorNative.java:196)
你知道为什么会抛出这个异常吗?谢谢 尝试以下方法:
}
我怀疑该错误可能与您没有始终正确关闭光标有关。尝试:
if (cursor != null) {
cursor.moveToFirst();
do {
first = cursor.getString(cursor.getColumnIndex("first"));
}while(cursor.moveToNext());
光标应始终关闭(无论其是否为空)。确保应用程序的其余部分也在这样做 尝试另一个线程
Cursor cursor = contentResolver.query(MY_URI, new String[] { "first" }, null, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
first = cursor.getString(cursor.getColumnIndex("first"));
}
cursor.close(); ///// Changed here
}
。但是Android SDK的源代码看起来像4.0.2_r1
私有游标窗口(source){mStartPos=source.(;
mWindowPtr=(source);
如果(mWindowPtr==0){
抛出新的(“游标窗口不能从活页夹创建”);
}
mName=(mWindowPtr);
mCloseGuard.open(“closeguard”);
其中mWIndowPtr为Int尝试此选项支持
ContentResolver的数据库中有多少行?如果游标未能分配足够的空间来存储所需的数据,则会引发该异常。由于您没有通过选择参数限制查询中的行数,因此光标将分配空间,以便在内存中保留所有列第一个的副本。如果有大量的行,进程可能无法分配内存。@Igreen,只有一行,这就是为什么我没有对它进行循环。我唯一能想到的另一件事是它正在取回一个损坏的包裹。你能详细说明一下“损坏的包裹”吗。此异常并非总是会遇到,但有时会遇到,我想知道这是否是因为其他原因。您需要检查moveToFirst是否为真,如果没有结果,则此操作将不起作用。您应该关闭Cursor或此操作对我有效。使用cordova联系人插件,开始在android 5.0.1上出现异常。提出一张罚单让他们看一看:close应该总是在最后一个街区。如果关闭之前的任何代码部分抛出异常,光标将不会关闭。@JeffreyBlattman只是一个小提示:您通常可以在Java上的资源中使用try而不是try finally,如果您使用Kotlin,则可以使用use
。但是我使用Kotlin扩展名。use()
-公共内联乐趣t.use(block:(t)->R):R
,那么这怎么可能呢?@androiddeveloper-well即使使用Kotlinuse
Crashlytics也有一份报告
if (cursor != null) {
cursor.moveToFirst();
do {
first = cursor.getString(cursor.getColumnIndex("first"));
}while(cursor.moveToNext());
Cursor cursor = contentResolver.query(MY_URI, new String[] { "first" }, null, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
first = cursor.getString(cursor.getColumnIndex("first"));
}
cursor.close(); ///// Changed here
}
new Thread(new Runnable(){ public void run(){
...here all code
}});
130 private CursorWindow(Parcel source) {
131 mStartPos = source.readInt();
132 mWindowPtr = nativeCreateFromParcel(source);
133 if (mWindowPtr == 0) {
134 throw new CursorWindowAllocationException("Cursor window could not be "
135 + "created from binder.");
136 }
137 mName = nativeGetName(mWindowPtr);
138 mCloseGuard.open("close");
139 }