Попытка получить длину нулевого массива при запуске приложения с мобильного устройства - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь загрузить несколько фотографий из базы данных SQLite в мое приложение. Поскольку я использую RecyclerView в своем классе адаптера в этой конкретной строке, где я преобразую байтовый массив в фактическое изображение, я получаю

java .lang.NullPointerException: попытка получить длину нулевого массива

но только когда приложение запускается с моего мобильного телефона. Если я использую эмулятор, все работает отлично. Для преобразования байтового массива в ImageView я использую растровое изображение:

Bitmap imageBitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
        mImageIv.setImageBitmap(imageBitmap);

Все мои фотографии сохраняются в формате BLOB, и любые из них не превышают 50 КБ с разрешением 500x500.

Я также пытался конвертировать байты с помощью библиотеки Picasso, но она не работала ни на эмуляторе, ни на моем мобильном телефоне.

Следующим решением был Glide, который дает мне идеальный вывод на эмуляторе, но когда я запускаю приложение со своего телефона, он говорит, что некоторые таблицы не существуют, и это ошибка:

android .database.sqlite.SQLiteException: нет такой таблицы: WHITEWINE (код 1 SQLITE_ERROR [1]):, во время компиляции: SELECT * FROM WHITEWINE

Затем я попытался запустить с другого мобильного устройства (старше моего мобильного телефона), и вот тут я совсем запутался ... Некоторые таблицы с фотографиями загружаются и помещаются в их фрагменты ... Но в остальном, если я попытаюсь открыть эти фрагменты, мое приложение взломает sh, и ошибка будет такой:

java .lang.RuntimeException: Canvas: попытка нарисовать слишком большое (128261340байт) растровое изображение.

Теперь у меня нет идеи, действительно ли это проблема с памятью, потому что мои фотографии сохраняются в типе BLOB или это что то другое?

1 Ответ

0 голосов
/ 12 апреля 2020

Я исправил свои ошибки!

Относительно первого:

java .lang.NullPointerException: Попытка получить длину нулевого массива

Я не используя Bitmap больше, вместо этого я реализовал библиотеку Glide! И эта простая строка кода решила мою ошибку:

Glide.with(mCtx).load(image).into(mImageIv);

Относительно второй ошибки:

android .database.sqlite.SQLiteException: нет такой таблицы: WHITEWINE (код 1 SQLITE_ERROR [ 1]):, во время компиляции: SELECT * FROM WHITEWINE

Очевидно, у меня в папке «Базы данных» в DDMS был мусорный файл. Я до сих пор не понимаю, как это было, поскольку я несколько раз удалял свое приложение, чтобы решить эту проблему. В любом случае, я просто удалил папку «баз данных» из DDMS и перезапустил приложение ... Итак, теперь вторая ошибка решена.

И, наконец, в отношении моей третьей ошибки, которая произошла на старом мобильном устройстве:

java .lang.RuntimeException: Canvas: попытка нарисовать слишком большое (128261340байт) растровое изображение

Это было вызвано фотографиями из моей папки для рисования ... Они были слишком большими для мобильного устройства, которое имеет меньше памяти. Мне было немного лень изменять их размер, поэтому я просто скопировал их в папку для рисования. Решение заключалось в использовании удивительного холодного приложения "Final Android Resizer" для изменения размера моих фотографий, и я отлично работал на старых мобильных устройствах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...