2011-02-03 4 views
1

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

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

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

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

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

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

+0

Вы уверены, что 'responseString' и, таким образом,' data' не равны нулю? – user432209

+0

Конечно, я уверен. data и responseString не являются нулевыми. – Ramoz

ответ

2

Вот одно решение, и для меня работает (зная, что формат, в котором изображение приходит с сервера через веб-службы 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; Вы должны Викисклад кодек-1.3.jar включен в папке активов

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

Благодаря одному из моих друзей для этого намека.

Смежные вопросы