2

あなたが見ることができるように、私はparam(dateTimeのタイプ)を送信する必要がある.net Webサービスを持っています:

 <startDateTime>dateTime</startDateTime>

Android クライアントでは、ksoap2 を使用していますが、そのタイプのデータを送信する方法がわかりません。このタイプの設定を手伝ってください- 以下のコードは機能しません。

PropertyInfo propInfo3 = new PropertyInfo();
propInfo3.name="startDateTime";
propInfo3.value="2012-02-01";
4

2 に答える 2

5

アプリケーションで Web サービス メソッドを呼び出す方法を次に示します。Java 日付を変換するために使用した方法に注意してください。ISO 日付形式が必要です。

protected static Object callMethod(String method, Map<String, Object> parameters) throws IOException, XmlPullParserException {
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, method);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.headerOut = new Element[1];
    envelope.headerOut[0] = buildAuthHeader();
    envelope.setOutputSoapObject(request);
    if (parameters != null) {
        for (String item : parameters.keySet()) {
            Object itemValue = parameters.get(item);
            if (itemValue.getClass().getName().equals("java.util.Date")) {
                // If it's a date then we have to format it because ksoap
                // does not know how to do this.
                request.addProperty(item, getSOAPDateString((java.util.Date) itemValue));
            } else {
                request.addProperty(item, itemValue);
            }
        }
    }

    HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS, 10000);
    httpTransport.debug = true;

    httpTransport.call(WSDL_TARGET_NAMESPACE + "/" + method, envelope);
    String soapString = httpTransport.requestDump;
    System.out.println(soapString);
    return envelope.getResponse();
}

実際の文字列を返すメソッドは次のとおりです。

private static Object getSOAPDateString(java.util.Date itemValue) {
    String lFormatTemplate = "yyyy-MM-dd'T'hh:mm:ss'Z'";
    DateFormat lDateFormat = new SimpleDateFormat(lFormatTemplate);
    String lDate = lDateFormat.format(itemValue);

    return lDate;
}
于 2012-10-17T12:11:58.063 に答える
0

あなたのサーバーでは、クライアントからのリターンは何ですか?

このような問題が発生した場合は、AndroidのLogcatに送信内容を表示し、サーバー側に取得内容を表示します。

日付にも少し問題があり(ksoap2とWebサービスを使用しています)、util.Dateで日付を送信する問題を解決し、プロジェクトでパターン日付を指定してSimpleDateFormatを使用し、その文字列を必要なものに変換します。

cya、Bertan


WSに送信する私のコードは次のとおりです。

public static byte[] send(String... param) throws SocketTimeoutException, IOException, XmlPullParserException, Exception{
            //First I send the WS Name
    String ws = param[0];
            //Second is the operationName
    SoapObject soap = new SoapObject(URL_SOAP, param[1]);

    Object retorno = null;

    int tamParam = param.length;

            //The 3 parameter for the infinity its the properties, name and the next it's the value...
    if (tamParam > 0) {
        for (int i = 2; i < tamParam; i++) {
            soap.addProperty(param[i], param[++i]);
        }
    }

    // create a envelope for the soap object
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setOutputSoapObject(soap);

    // create a HttpTransport to send the object soap with 15s delay
    MyHttpTransport httpTransport = new MyHttpTransport(URL + ws, 15000);

    // send the req
    Long tempo1 = 0l;
        tempo1 = System.currentTimeMillis();
        httpTransport.call("", envelope);

        retorno = envelope.getResponse();
        Long tempo2 = System.currentTimeMillis();

    httpTransport.reset();
    //I ever get byte[] from the WS...
    if (retorno != null) {
        byte[] bloc = Base64.decode(retorno.toString(), Base64.DEFAULT);
        return bloc;
    } else {
        return null;
    }
}
于 2012-09-05T11:22:44.410 に答える