CursorIndexOutOfBoundException index 0 размер 0 в Android
Я пытаюсь реализовать функцию в своем приложении, где кнопка SOS будет отображаться на экране входа в систему, если пользователь уже входил в систему. В противном случае кнопка SOS не будет отображаться.
Для этого я создал таблицу базы данных в SQLite исключительно для отслеживания того, входил ли пользователь в систему раньше или нет. Каждый раз, когда пользователь входит в систему, в таблицу будет вставлено строковое значение LoggedIn .
При загрузке страницы входа в систему данные о состоянии входа в систему извлекаются из таблицы базы данных. Если данные LoggedIn , я показываю кнопку SOS , в противном случае я делаю кнопку SOS невидимой ,
Я использую следующий метод для получения данных о состоянии, но я получаю исключение:
CursorIndexOutOfBoundException index 0 size 0
Как я могу это исправить? Как правильно прочитать данные с курсора?
4 ответа
В сообщении говорится, что вы пытаетесь прочитать (извлечь данные) из первого столбца первой строки, НО что нет первой строки и, таким образом, индекс 0 (строка 1) находится за пределами границ (столбец 0 всегда будет существовать, иначе запрос будет недействительным и завершится ошибкой с другим сообщением (возможно, из-за синтаксической ошибки)).
Причина в том, что строки не возвращены. Проверка нулевого курсора из метода rawQuery (или эквивалентного удобного метода query ) бесполезна, так как Cursor будет возвращен. Однако, если у курсора нет строк, он будет пустым, и поэтому метод getCount вернет 0.
Методы Cursor move. (такие как moveToFirst ) также будут возвращать значение false, если перемещение невозможно.
Таким образом, вы можете вместо if (cursor != null) <. >использовать if (cursor.moveToFirst()) < . >или (cursor.getCount() > 0) <. >.
Таким образом, следующее решит проблему:
- Обратите внимание, что в случае отсутствия возвращаемых строк метод getLoggedInStatus возвратит пустую строку.
Количество проверок также больше нуля
Ваш код почти правильный. Однако cursor.moveToFirst(); возвращает true или false в зависимости от того, смог ли Cursor выполнить итерацию.
Таким образом, в качестве андроида по умолчанию Cursor имеет индекс -1 по умолчанию, чтобы он работал внутри циклов while . Чтобы убедиться, что внутри вашего Cursor есть какие-либо элементы, заключите код в это выражение if :
Скорее всего, в таблице нет строк.
Чтобы проверить это, есть несколько способов, один из них:
Источник
Index 0 size 0 android
Разметка памяти мобильных устройств. Теория и практика
В этой теме будут затронуты следующие вопросы:
- строение файлов разметки памяти, таких как scatter, MBR, EBR, GPT, EFI, parameter и др.;
- предложены средства (приложения) для изменения разметки памяти;
- даны практические рекомендации по осуществлению операций по переразбивке (переразметке) памяти мобильных устройств.
Для начала стоит начать с материала под спойлером «Полезная информация«, а затем, наполнившись знаниями, приступить и к практике, используя приложения, представленные ниже:
Требования:
- операционная система Windows 7 или выше;
- установленный пакет .NET 4.0.
Возможности:
- позволяет изменять размер ЛЮБОГО раздела памяти с автоматическим пересчетом параметров всех разделов;
- позволяет удалять любой раздел полностью;
- восстанавливать PMT-файл по имеющемуся scatter-файлу;
- восстанавливать scatter-файл по имеющемуся PMT-файлу;
- автоматически формирует файлы разметки памяти (scatter, MBR+EBR);
- устанавливает верхнюю границу памяти 3 способами ;
- размеры памяти привязаны к размеру блока, размер которого можно выбрать ;
- работает с нестандартными scatter-файлами;
- мультиязычность. Поддерживается два языка: русский и английский.
Свежая версия
Архив содержит папку с ресурсами русского языка, распаковать ВСЮ структуру вместе.ScatterEditor_v1.06.zip ( 43.32 КБ )
ИнструкцияИнструкция пользователя ScatterEditor_v1.06.zip ( 1.36 МБ )
Требования:
- операционная система Windows 7 или выше;
- установленный пакет .NET 4.0.
Возможности:
- поддерживает файлы новой структуры;
- позволяет изменять размер ЛЮБОГО раздела памяти с автоматическим пересчетом параметров всех разделов;
- позволяет удалять разделы;
- автоматически формирует файлы разметки памяти (scatter, MBR+EBR);
- правильно устанавливает верхнюю границу памяти, которая просматривается через свойства аппарата;
- мультиязычность. Поддерживается два языка: русский и английский.
Свежая версия
Архив содержит папку с ресурсами русского языка, распаковать ВСЮ структуру вместе.Scatter2Editor_v207.7z ( 34.77 КБ )
Инструкция в pdf форматеИнструкция пользователя Scatter2Editor_v2.03.zip ( 1011.1 КБ )
Требования
- операционная система Windows 7 или выше;
- установленный пакет .NET 4.0.
Возможности
- позволяет редактировать размер и флаг ЛЮБОГО раздела;
- позволяет изменять параметры командной строки запуска;
- мультиязычная версия;
Свежая версияRK_ParamEd_v1.01.rar ( 20.43 КБ )
Инструкция пользователяRK_ParamEd_1.01. Users manual.rar ( 990.79 КБ )
- PartitionsA23 — разметка разделов на процессорах AllWinner — для чипов А23 и А33, A31s (возможно подойдёт и для других чипов)
Приложение для обработки файлов разметки схем DOS (MBR+EBR, partition.bin и т.п.) и GUID (файл GPT, EFI и т.п.).
Требования
- операционная система Windows 7 или выше;
- установленный пакет .NET 4.0.
Свежая версияPartitionsEditor_1.02.rar ( 122.15 КБ )
Инструкция пользователя
Скоро будет.
В теме нет куратора. По вопросам наполнения шапки обращайтесь к модераторам раздела через кнопку под сообщениями, на которые необходимо добавить ссылки.
Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать Куратором (предварительно изучив шапку темы и все материалы для кураторов).
Сообщение отредактировал derak1129 — 12.10.21, 06:08
Проверить успешность процесса переразмеки, можно только одним способом : посмотреть каким стал размер того раздела, манипуляции с которым Вы проводили в программе ScatterEditor .
Посмотреть размеры разделов телефона можно, например, через программку MTK Droid Tools Для этого подключите тел. к ПК, на котором уже установлены все необходимые драйвера, и запускаем прогу (через эту же прогу получаем временный Root-Shell , если его нет) затем жмем на кнопку «Карта блоков» . Появляется новое окошко, в котором и смотрим размеры разделов телефона.
Сообщение отредактировал SevenMaxs — 15.09.14, 17:14 ps: Могу помочь в создании топиков (в стиле Android update-script, лучшую инфу с форума собрал в одном месте). Prince_Saint Что такое MBR-файл. Введение. Структура MBR и EBR файлов. MBR имеет размер 512 байт, т.е. один физический сектор и имеет следующую структуру: Каждая запись таблицы разделов имеет длину 16 байт, а содержимое зависит от используемой ОС. Для мобильных устройств формат записи таблицы разделов имеет следующий вид: Структура записи таблицы разделов Смещение раздела указывается от первого сектора описываемой этой таблицей области памяти. Т.е. если в поле смещения раздела указано значение 0х400, а сама таблица (MBR) расположена в памяти, начиная с адреса 0х00600000 (это указывается в scatter-файле), то этот раздел физически будет расположен в памяти с адреса 0х00600000 Код типа раздела описывает его содержимое. Так, если раздел не содержит информации, т.е. пуст, то его код устанавливается в 0х00. Работа с MBR и EBR файлами. В связи с большим объемом материала примеры я решил вынести в отдельный пост. Сообщение отредактировал vin2809 — 12.02.14, 20:39 Введение. Строение scatter file. [__NODL_]name offset [length]
Квадратные скобки означают необязательный параметр.
EXT4_IMG — раздел содержит часть файловой системы EXT4;
EMMC_BOOT_1 —
BINREGION — область «сырого кода»;
Пример полного scatter-файла второй версии, приведен в файле «Scatter_v2.txt». Работа со scatter file. Пример scatter-файла Сообщение отредактировал vin2809 — 27.02.14, 15:26 Источник |