0

Android アプリケーションの base64Binary フィールドから byte[] を取得しようとしています。私はなんとかデータを取得できましたが、何らかの理由でデータ配列がいくつかの場所で値でいっぱいになっています。たとえば、C#の同じデータ配列が正の数を返します。

C# Web サービスでは、バイト配列は 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();


} 

ps私は約6つの異なるbase64デコードクラスを介してresultDataを実行しましたが、それらはすべて間違ってデコードしているため、問題は応答によって返された文字列であると推測しています。

どんな助けでも大歓迎です, ありがとう, トーテム

4

2 に答える 2

0

私はまったく同じ問題を抱えていたので、このリンクを踏んだ http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html

Robert W. Harder のサイトから Base64 クラスをダウンロードしたところ、うまくいきました。私がした唯一のことは、クラス自体にパッケージ定義を追加して、それを使用できるようにすることでした。

注: 私は Android 1.6 で作業しているので、上向きに動作すると想定できます。

お役に立てれば :)

于 2011-01-25T06:28:35.823 に答える
0

実際の問題は非常に単純で、サーバーがC++であることを忘れていたため、base64エンコーディングのバイトは署名されておらず、Javaで見つけたすべてのクラスはバイトでした。次のように、読み取りストリームから符号付きビットを削除する必要がありました。

nextByte = (short)(0xFF & (short)buf[offset + i]);
于 2011-02-14T18:01:26.953 に答える