我试图从我的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,并且它们都解码错误,所以我猜测问题是响应返回的字符串。
任何帮助将不胜感激, 谢谢, 图腾
答案 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]);