Android KSOAP2 base64Бинарный ответ от .net webservice - PullRequest
0 голосов
/ 23 января 2011

Я пытаюсь получить байт [] из поля base64Binary в моем приложении для Android. мне удается получить данные, хотя по некоторым причинам массив данных заполнен значениями в некоторых местах, где тот же массив данных в C # возвращает положительные числа, например:

В C # webservice байтовый массив может выглядеть как 46,0,45 ..... а в андроиде это выглядит как 46,0, -112 ......

как я могу получить правильный байтовый массив из поля base64Binary с помощью KASOP2?

это код, который я сейчас использую:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);
request.addProperty("Name", sName);
SoapSerializationEnvelope envelope =
  new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);


try
{
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
Object o = envelope.bodyIn;
SoapPrimitive result =  (SoapPrimitive)envelope.getResponse();
//to get the data should be a base
String resultData = result.toString();


} 

p.s Я проверил resultData примерно через 6 различных классов декодирования base64, и они все неправильно его декодируют, поэтому я предполагаю, что проблема заключается в строке, возвращаемой ответом.

Любая помощь будет принята с благодарностью, Спасибо, Тотем

Ответы [ 2 ]

0 голосов
/ 14 февраля 2011

На самом деле моя проблема была очень простой, я забыл, что серверы были c ++, поэтому байт для кодировки base64 был без знака, и все классы, которые я нашел для java, были с байтом. просто пришлось удалить бит со знаком из потока чтения следующим образом:

nextByte = (short)(0xFF & (short)buf[offset + i]);
0 голосов
/ 25 января 2011

У меня была точно такая же проблема, затем я перешел по этой ссылке http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html

Я скачал класс Base64 с сайта Роберта У. Хардера, и это сработало, единственное, что я сделал, это добавил свой пакетопределение в самом классе только для того, чтобы я мог его использовать.

Примечание: я работаю с Android 1.6, поэтому могу предположить, что он работает вверх.

Надеюсь, это поможет:)

...