来自.net webservice的Android KSOAP2 base64Binary响应

时间:2011-01-23 17:50:01

标签: android base64 ksoap2

我试图从我的Android应用程序中的base64Binary字段获取一个byte []。 我设法获取数据虽然由于某种原因数据数组在某些地方充满了值,其中C#中的相同数据数组返回正数,例如:

在C#webservice中,字节数组可能看起来像46,0,45 ...... 在android中它看起来像46,0,-112 ......

如何从带有KASOP2的base64Binary字段中获取正确的字节数组?

这是我目前使用的代码:

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我已经通过大约6个不同的base64解码类运行resultData,并且它们都解码错误,所以我猜测问题是响应返回的字符串。

任何帮助将不胜感激,   谢谢,      图腾

2 个答案:

答案 0 :(得分:0)

我有完全相同的问题,然后我踩到了这个链接 http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html

我从Robert W. Harder的网站上下载了Base64类并且它有效,我唯一能做的就是在类中添加我的包定义,以便我可以使用它。

注意:我正在使用Android 1.6,所以我可以假设它可以正常工作。

希望这会有所帮助:)

答案 1 :(得分:0)

实际我的问题非常简单我忘了服务器是c ++因此base64编码的字节是无符号的,我找到的所有java类都是byte。 只需要从读取流中删除已签名的位,如下所示:

nextByte = (short)(0xFF & (short)buf[offset + i]);