2011-01-23 3 views
0

Im essayant d'obtenir un octet [] d'un champ base64Binary dans mon application Android. je parviens à obtenir les données que pour une raison quelconque le tableau de données est plein avec des valeurs dans certains endroits, où le même tableau de données en C# retourne des nombres positifs, par exemple:réponse Android KSOAP2 base64Binary de .net webservice

En C# webservice le tableau d'octets pourrait ressembler à 46 , 0,45 ..... et dans Android il ressemble à 46,0, -112 ......

comment puis-je obtenir le tableau d'octets correct d'un champ base64Binary avec KASOP2?

c'est le code im en utilisant:

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(); 


} 

ps j'ai couru resultdata par environ 6 différentes classes de décodage base64 et ils ont tous le décoder mal, donc im deviner le problème est la la chaîne renvoyée par la réponse.

Toute aide sera grandement appréciée, Merci, Totem

Répondre

0

Actual mon problème était très simple j'oublié les serveurs étaient C++ octet donc pour le codage base64 était non signé, et toutes les classes que j'ai trouvé pour java étaient avec octet. juste eu à retirer le bit signé dans le flux de lecture comme ceci:

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

peut u s'il vous plaît expliquer brièvement plaît.Je me bats pour 2 jours –

0

J'ai eu exactement le même problème, alors j'étagés sur ce lien http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html

J'ai téléchargé la classe base64 à partir du site de Robert W. Plus dur et cela a fonctionné, la seule chose que j'ai été d'ajouter ma définition de package dans la classe elle-même juste pour que je puisse l'utiliser.

Note: Je travaille avec Android 1.6, je peux prendre ça marche vers le haut.

Hope this helps :)