decodeByteArray() возвращает null примерно в 90% случаев

Я пытаюсь отобразить изображение, отправленное по локальной сети, на мое устройство Android. Изображение отправляется с компьютера через tcp на мое устройство Android. Изображение в формате png. Отправляемые данные представляют собой поток байтового массива png, который упакован в сообщение google protobuf. На стороне андроида при получении данных они считываются в массив байтов, после чего массив передается BitmapFactory.decodeByteArray(). Однако это возвращает null примерно в 90% случаев. Это происходит только на реальном устройстве, но в данный момент я могу проверить только на HTC невероятном. Я пробовал это на эмуляторе Android SDK, и я могу получить свое изображение в 100% случаев.

Другие проблемы, связанные с BitmapFactory онлайн, всегда были связаны с использованием файловых потоков, когда декодирование не позволяет получить все данные, но мне еще предстоит найти какие-либо решения, когда разработчик уверен, что все данные получены, и это происходит только на реальном устройстве.

Есть ли какой-то тип использования, о котором я не знаю для decodeByteArray()? byte[], который я передаю, — это просто сам файл.

Редактировать: Решено благодаря второму пониманию Брайана Кули.

Я просто слишком быстро решил, что ошибка может быть в decodeByteArray(). Если кто-то когда-нибудь столкнется с этой проблемой, убедитесь, что у вас есть данные в полном объеме. Я сделал ложное предположение, что мой поток байтов был хорошим. Итак, сначала сделайте быстрое сравнение данных, которые вы отправляете и получаете, и убедитесь, что вы получаете то, что должны.


person tifemur    schedule 22.03.2011    source источник


Ответы (1)


Вы можете попробовать записать необработанные байты в файл на SD-карте и просмотреть его на своем компьютере, как было предложено для этот вопрос

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

person Brian Cooley    schedule 22.03.2011
comment
Спасибо за ответ. Записывая данные локально, я точно вижу, что изображение зашифровано. Надо будет разобраться, почему так. Интересно, почему это иногда работает. Какая может быть разница между невероятным и эмулятором? - person tifemur; 23.03.2011