0

嘿,我正在尝试使用 AlphabetIndexer 实现 FastScroller。我正在列表视图中使用 500 个联系人对其进行测试。

当试图快速滚动它时,它会返回以下错误:

java.lang.IllegalStateException:从行 0 col 0 获取字段槽失败

在这种方法中:

@Override
public int getPositionForSection(int section)
{
    return mAlphaIndexer.getPositionForSection(section);
}

我想这mAlphaIndexer.getPositionForSection(section)是:返回'0',因为我已经在这条线上放了一个日志。并且错误出现在日志中,不再出现在返回中。

编辑:

LogCat 中显示的错误让我感到困惑和担心,因为我正在尝试在列表视图中设置图像和文本以及复选框,因此对于每个视图,我都设置了一个图像和一个文本视图以及一个复选框。出现了这个错误:

ERROR/CursorWindow(24241): 需要增长:mSize = 1048576, size = 7702, freeSpace() = 3474, numRows = 135 ERROR/CursorWindow(24241): 没有增长,因为已经有 135 行,最大大小 1048576错误/光标(24241):未能在 134,5 处为 blob 分配 7702 字节

我想这是因为它的大小,因为我正在测试在 ListView 中创建超过 1000 个项目。这可能是可能的错误吗?

它还显示在 LogCat 上:

ERROR/CursorWindow(24098):对字段槽 0,0 的错误请求。numRows = 0,numColumns = 0

这是我的 CursorAdapter 构造函数:

public MyCursorAdapter(Context context, Cursor cursor, ArrayList<Integer> ids) 
        {
            super(context, cursor);
            try
            {           

                mAlphaIndexer = new AlphabetIndexer(cursor, cursor.getColumnIndexOrThrow("Name")," ABCDEFGHIJKLMNOPQRSTUVWXYZ");
            mAlphaIndexer.setCursor(cursor);
            if(!cursor.isClosed() && cursor != null)
            {
                Log.i("MyCursorAdapter", "Cursor opened and not null " + cursor);
            }
            this.mSelectedIndividuals = ids;
            catch(IllegalArgumentException ex)
            {
                Log.e("MyCursorAdapter", "Error: " + ex);
            }
        }

游标既不为空也不关闭(打印日志消息)。

完整的日志!粗线是错误出现的地方,这是帖子开头发布的第一个方法。

07-14 09:40:49.042: ERROR/AndroidRuntime(24098): FATAL EXCEPTION: main 07-14 09:40:49.042: ERROR/AndroidRuntime(24098): java.lang.IllegalStateException: get field slot from row 0 col 0失败 07-14 09:40:49.042: ERROR/AndroidRuntime(24098): at android.database.CursorWindow.getLong_native(Native Method) 07-14 09:40:49.042: ERROR/AndroidRuntime(24098): at android.database。 CursorWindow.getLong(CursorWindow.java:380) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:108) 07-14 09:40:49.042:错误/AndroidRuntime(24098): 在 android.database.AbstractCursor.moveToPosition(AbstractCursor.java:194) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android.widget.AlphabetIndexer.getPositionForSection(AlphabetIndexer.java :202) 07-14 09:40:49.042:错误/AndroidRuntime(24098):在 com.test.myapplication.MyCursorAdapter.getPositionForSection(MyCursorAdapter.java:181) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android.widget.FastScroller.scrollTo(FastScroller.java:324) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android. widget.FastScroller.onTouchEvent(FastScroller.java:471) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android.widget.AbsListView.onTouchEvent(AbsListView.java:2104) 07-14 09:40: 49.042: ERROR/AndroidRuntime(24098): at android.widget.ListView.onTouchEvent(ListView.java:3446) 07-14 09:40:49.042: ERROR/AndroidRuntime(24098): at android.view.View.dispatchTouchEvent(View .java:3885) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:903) 07-14 09:40:49.042: 错误/AndroidRuntime(24098) ): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 07-14 09:40:49。042: 错误/AndroidRuntime(24098): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup .java:942) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 07-14 09:40:49.042: 错误/AndroidRuntime(24098 ): 在 com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1691) 07-14 09:40:49.042: ERROR/AndroidRuntime(24098): 在 com.android.internal.policy。 impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1125) 07-14 09:40:49.042: ERROR/AndroidRuntime(24098): at android.app.Activity.dispatchTouchEvent(Activity.java:2096) 07-14 09:40: 49.042:错误/AndroidRuntime(24098):在 com.android。internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1675) 07-14 09:40:49.042: ERROR/AndroidRuntime(24098): at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2194) 07 -14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android.view.ViewRoot.handleMessage(ViewRoot.java:1878) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android.os .Handler.dispatchMessage(Handler.java:99) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 android.os.Looper.loop(Looper.java:130) 07-14 09:40:49.042 : ERROR/AndroidRuntime(24098): at android.app.ActivityThread.main(ActivityThread.java:3683) 07-14 09:40:49.042: ERROR/AndroidRuntime(24098): at java.lang.reflect.Method.invokeNative(本机方法)07-14 09:40:49.042:错误/AndroidRuntime(24098):在 java.lang.reflect.Method。调用(Method.java:507)07-14 09:40:49.042:错误/AndroidRuntime(24098):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)07-14 09: 40:49.042: 错误/AndroidRuntime(24098): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 07-14 09:40:49.042: 错误/AndroidRuntime(24098): 在 dalvik.system .NativeStart.main(本机方法)

我该如何解决?谢谢!

4

2 回答 2

11

发生错误是因为CursorWindow类只支持每次查询读取 1MB 的数据,所以我不得不优化我的查询。

我只是在数据库中搜索数据,列表视图中的当前视图,所以我不需要查询所有数据。

于 2011-07-17T04:15:45.227 回答
0

您是否通过调用设置光标setCursor(cursor)?你的光标在这个时间点有效吗?

于 2011-07-14T12:03:02.577 回答