Android: получить изображение из формата base64binary - PullRequest
1 голос
/ 03 февраля 2011

Я использую веб-сервис для получения изображения. Ответ сервиса содержит изображение в формате base64Binary. Я пытаюсь декодировать данные ответа с помощью Base64.decode () (http://iharder.sourceforge.net/current/java/base64/). См. Мой код ниже:

 byte[] data = Base64.decode(responseString);
 Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
 imageView.setImageBitmap(bmp);

decodeByteArray всегда возвращать ноль.

Я пытаюсь сохранить данные в файле .png. Я могу открыть этот файл на своем ПК и в приложении Android File Manager. Но предварительный просмотр файлового менеджера не смог открыть этот файл.

Затем я пытаюсь проанализировать эти данные, используя клиент .NET с методом Convert.Base64 (). И это изображение успешно обрабатывается. Затем я сравниваю массив байтов в изображении, созданном с помощью Android-клиента и .NET-клиента. Различия были в знаке байтов. .NET использует неподписанные байты, но Java использует только подписанные байты. Это причина моей проблемы?

У кого-нибудь есть такая же проблема при декодировании base64Binary?

1 Ответ

2 голосов
/ 17 февраля 2011

Вот одно из решений, и для меня это работает (зная, что формат, в котором изображение поступает с сервера через веб-сервис, является base64binary)

decodedIcon[] = null;
byte[] bb = (resposeString).getBytes("utf-8");
decodedIcon = Base64.decodeBase64(bb);

Bitmap bitmap = BitmapFactory.decodeByteArray(decodedIcon, 0,
decodedIcon.length);

//then you get the image view and setImageBitmap(bitmap)

PS:

Base64.decodeBase64 происходит из библиотеки org.apache.commons.codec.binary.Base64;Вы должны включить commons-codec-1.3.jar в папку ресурсов

, версия не обязательно должна быть 1.3

Спасибо одному из моих друзей за эту подсказку.

...