0

Android APP と SOAPWebservice があります。整数配列間で送信しようとしていますが、Android Logcat は次のように述べています。

06-17 15:32:34.355: W/System.err(3107): java.lang.RuntimeException: Cannot serialize: [Ljava.lang.Integer;@42046ff8
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:664)
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:649)
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:595)
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:573)
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:658)
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:555)
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.SoapEnvelope.write  (SoapEnvelope.java:205)
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.transport.Transport.createRequestData(Transport.java:134)
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:144)
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:116)
06-17 15:32:34.365: W/System.err(3107):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:111)

データをシリアル化できない場合、どうすれば整数の束を送信できますか?

ANDROID コード (AsyncTask)

@Override
protected Integer doInBackground(Object... params) {

    try {       

        OSS_APPServiceCredentials wsc = new OSS_APPServiceCredentials("startUpdate");

        request = new SoapObject(wsc.init().get(1), wsc.init().get(0));

        request.addProperty("ParameterA", (String)params[0]);           
        request.addProperty("ParameterB", (Integer[])params[1]);

        envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);

        OSS_PermitAllSSLConnections.allowAllSSL();
        KeepAliveHttpsTransportSE androidHttpTransport = new KeepAliveHttpsTransportSE(wsc.init().get(3),Integer.parseInt(wsc.init().get(5)), wsc.init().get(4), Integer.parseInt(wsc.init().get(6)));

        androidHttpTransport.call(wsc.init().get(2), envelope); 
        Object result = envelope.getResponse();
        Integer res = Integer.parseInt(result.toString());

        return res;
    } 

    catch (Exception E) {
        E.printStackTrace();
    }
    return null;
}

ありがとう!

編集:

私はこれをやろうとしました:

BASE64Decoder decoder = new BASE64Decoder();
byte[] bytes = decoder.decodeBuffer(permissions);

int[] a = new int[bytes.length / 4];
ByteBuffer.wrap(bytes).asIntBuffer().get(a);

しかし、Eclipse(WebService内)はこのエラーを言いますが、その理由はわかりません!

The method wrap(byte[]) is undefined for the type ByteBuffer

編集:

最後に、私は問題を解決しました。私だけがインポートする必要があります:

import java.nio.ByteBuffer;
4

1 に答える 1

4

ByteBuffer を使用して int[] を byte[] に変換できます

    int[] a = { 1, 2, 3 };
    ByteBuffer bb = ByteBuffer.allocate(a.length * 4);
    bb.asIntBuffer().put(a);
    byte[] bytes = bb1.array();

byte[] をサーバーに送信し、それを int[] に変換します

    int[] a = new int[bytes.length / 4];
    ByteBuffer.wrap(bytes).asIntBuffer().get(a);
于 2013-06-17T13:49:31.223 に答える