Маловероятно, что Курсор равен null , если бы вы столкнулись с ошибкой до указанной вами ошибки.
- Любой из методов SQLiteDatabase (запрос или rawQuery) не будет возвращать нулевой Курсор, если данные не были извлечены, тогда Курсор будет пустым, и я полагаю, что не было бы представления длясвязывать в этом случае.
Хранение изображений в базе данных не рекомендуется, они в основном являются раздутыми, рекомендуемый способ - сохранить изображение в виде файла и сохранить путь к изображению в базе данных (иличасть пути, которую можно использовать для извлечения изображения из файла).
В Android существует ограничение 2 МБ для CursorWindow (буфер для строк в Курсоре).Хотя изображение размером более 2 МБ (или даже около 2 МБ) может быть сохранено в базе данных, такое изображение не может быть извлечено, поскольку оно не может поместиться в CursorWindow.Обычно это приводит к исключению.
- Размер, который может поместиться, зависит от других столбцов, поскольку в CursorWindow должна помещаться полная строка, поэтому нет определенного размера
Даже на 1 МБ вы, вероятно, сможете извлечь только 1 строку за раз.
Как уже говорилось, попытка сохранить изображения, а не пути, скорее всего, приведет вас от проблемы к проблеме.
Этот ответ включает пример сохранения изображения размером до 100 КБ в базе данных, но в противном случае изображение сохраняется в виде файла и сохранения пути в базе данных.
- Демаркация 100 КБ была основана на 35% быстрее, чем файловая система (то есть может быть, что хранение небольших изображений в базе данных может быть более эффективным, чем получение изображения по пути)
В этом вопросе и ответе показано средство для сохранения больших изображений (путем разбиения изображений на куски), но обратите внимание, что этот метод не рекомендуется.
Я бы предложилчто любое изображение, сделанное с помощью камеры, вероятно, будет слишком большим, поэтому вы, вероятно, хотите всегда сохранять изображение в виде файла и сохранять путь в базе данных.Таким образом, первая ссылка, вероятно, самая полезная.