java.lang.IllegalStateException: получить слот поля из строки 0 col 0 не удалось
Эй, я пытаюсь реализовать FastScroller с AlphabetIndexer. И я тестирую это с 500 контактами в виде списка.
И при попытке быстрой прокрутки он возвращает следующую ошибку:
java.lang.IllegalStateException: получить слот поля из строки 0 col 0 не удалось
В этом методе:
@Override
public int getPositionForSection(int section)
{
return mAlphaIndexer.getPositionForSection(section);
}
Я предпочитаю это: mAlphaIndexer.getPositionForSection(section)
возвращает '0', потому что я поставил Log с этой строкой. И ошибка появилась в журнале, а не в возврате.
Редактировать:
В LogCat появляется ошибка, которая вызывает у меня замешательство и беспокойство, потому что я пытаюсь установить изображения, текст и флажки в виде списка, поэтому для каждого просмотра я устанавливаю изображение, текстовое представление и флажок. И эта ошибка возникла:
ОШИБКА /CursorWindow(24241): необходимо увеличить: mSize = 1048576, размер = 7702, freeSpace() = 3474, numRows = 135 ОШИБКА /CursorWindow(24241): не растет, поскольку уже есть 135 строк, максимальный размер 1048576 ОШИБКА / Курсор (24241): не удалось выделить 7702 байта для BLOB-объекта в 134,5
Я предполагаю, что это из-за его размера, из-за того, что я тестирую создание более 1000 элементов в ListView. Может ли это быть возможной ошибкой?
это также показывает на LogCat:
ОШИБКА / 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: ОШИБКА /AndroidRuntime(24098): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной 07-14 09:40:49.042: ОШИБКА /AndroidRuntime(24098): java.lang.IllegalStateException: получить слот поля из строки 0 col 0 не удалось 07-14 09:40:49.042: ОШИБКА /AndroidRuntime(24098): в android.database.CursorWindow.getLong_native(собственный метод) 07-14 09:40:49.042: ОШИБКА /AndroidRuntime(24098): в 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.get.PositionForSection(AlphabetIndex):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): на андре oid.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: ОШИБКА /AndroidRuntime(24098): на android.widget.ListView.onTouchEvent(ListView.java:3446) 07-14 09:40:49.042: ОШИБКА /AndroidRuntime(24098): на 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): на андроид. view.ViewGroup.dispatchTouchEvent (ViewGroup.java:942) 07-14 09:40:49.042: ОШИБКА / AndroidRuntime (24 098): на 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: ОШИБКА /AndroidRuntime(24098): в com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1125) 07-14 09:40:49.042: ОШИБКА /AndroidRuntime(24098): на 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: ОШИБКА /AndroidRuntime(24098): в 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 (240 98): на android.os.Looper.loop(Looper.java:130) 07-14 09:40:49.042: ОШИБКА /AndroidRuntime(24098): на android.app.ActivityThread.main(ActivityThread.java:3683) 07-14 09:40:49.042: ОШИБКА /AndroidRuntime(24098): в java.lang.reflect.Method.invokeNative(собственный метод) 07-14 09:40:49.042: ОШИБКА /AndroidRuntime(24098): в java.lang. refle.Method.invoke(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(собственный метод)
Как я могу решить это? Спасибо!
2 ответа
Ошибка произошла потому, что класс CursorWindow поддерживает чтение только 1 МБ данных на запрос, поэтому мне пришлось оптимизировать свой запрос.
Я только искал данные в базе данных, текущие представления в представлении списка, поэтому мне не нужно было запрашивать все данные.
Вы установили курсор, позвонив setCursor(cursor)
? Ваш курсор действителен в данный момент времени?