Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法从活页夹创建光标窗口_Android_Cursor_Android Cursor - Fatal编程技术网

Android 无法从活页夹创建光标窗口

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

然后在第3行(根据日志),我不时会遇到这个例外(摘录如下):

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”);

其中mWIndowPtrInt

尝试此选项支持
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即使使用Kotlin
use
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 }