Похоже, вы пропустили важный шаг декодирования.Код, генерирующий ответ SOAP, должен кодировать байтовый массив, чтобы его можно было представить в виде строки в XML.Трудно сказать, как вы должны декодировать его, не зная механизма кодирования, используемого на стороне сервера ( base64 и т. Д. ).
В приведенном выше коде вы вызываете String#getBytes () , которая кодирует данную строку в виде двоичных данных, используя набор символов по умолчанию (который является UTF-8 в Android).Это не то же самое, что декодирование исходных данных изображения.UTF-8 не может использоваться в качестве механизма кодирования общего назначения, поскольку он не может представлять какую-либо произвольную последовательность байтов (не все последовательности байтов являются действительными UTF-8).
Проверьте код службы, чтобы увидеть, как он кодируетдвоичные данные и использовать соответствующий механизм декодирования на стороне клиента, и это должно решить вашу проблему.
HTH.
РЕДАКТИРОВАТЬ : Этот faq (для более старой версии, но, вероятно, все еще применяется) рекомендует кодировать массив байтов как base64 и помещать его в SoapPrimitive.Лично я бы использовал Commons Codec и его класс Base64 для кодирования байтового массива в виде строки на стороне сервера и использовал его на стороне клиента для декодирования этой строки обратно в исходный байтовый массив.
Одна вещь, на которую следует обратить внимание ... Android фактически включает в себя более старую версию кодека Commons, так что это может вас запутать.В частности, он не включает удобный метод encodeBase64String
, поэтому вам нужно будет поэкспериментировать или провести некоторое исследование, чтобы выяснить, какие методы декодирования существуют на платформе Android.Вы можете использовать android.util.Base64 на стороне клиента, но убедитесь, что используете правильные флаги, соответствующие стилю кодировки, который вы использовали на стороне сервера.Удачи.