0

ksoap getResponse(); から構造化データを受信しようとすると問題が発生します。

サイトからSoapObjectsを使用してデータを送受信するためのガイドをすでに注意深く読みました:サイトへのリンク

私はこのWSDLを使用しています

取得しようとしているオブジェクトの構造は次のとおりです。

<message name="doSearchResponse">
   <part name="search-count" type="xsd:int"/>
   <part name="search-count-featured" type="xsd:int"/>
   <part name="search-array" type="typens:ArrayOfSearchResponse"/>
   <part name="search-excluded-words" type="typens:ArrayOfExcludedWords"/>
   <part name="search-categories" type="typens:ArrayOfCategoriesStruct"/>
</message>

これは、doSearch メソッドで使用される一種の出力オブジェクトだと思います。

<operation name="doSearch">
    <input message="typens:doSearchRequest"/>
    <output message="typens:doSearchResponse"/>
</operation>

これは、検索操作を実行してから、上に示したオブジェクト (doSearchResponse) を取得しようとしているコードです。

public void search(String searchPhrase) {

    /* search criteria holder */
    SoapObject searchOptType = new SoapObject(API_NAMESPACE, "SearchOptType");
    searchOptType.addProperty("search-string", searchPhrase);

    /* search method */
    SoapObject doSearch = new SoapObject(API_NAMESPACE, "doSearch");
    doSearch.addProperty("session-handle", sessionToken);
    doSearch.addProperty("search-query", searchOptType);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);

    envelope.dotNet = true;

    envelope.setOutputSoapObject(doSearch);

    Object response = null;
    try {
        transport.call("", envelope);

        response = envelope.getResponse();
        System.out.println(response.getClass());
    } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

検索は正常に機能しますが、1 つのオブジェクトのみが返されます。つまり、searchPhrase に一致するアイテムが見つかった数である単一の整数オブジェクト (配列ではない) です。これが doSearchResponse オブジェクトの最初の位置だと思います。しかし、残りの部分が必要です。特に、検索配列が必要です。私は何を間違っていますか?これは、envelope.call("and this string here", ...) を処理するためのものではありませんか?

4

2 に答える 2

0

私はそれを解決しました。

問題は、バージョン 2.4 の KSOAP2 ライブラリでした。実際には、単一の Integer オブジェクトのみを返す理由がわかりません。しかし、バージョン 3.0.0 RC4 では、同じ方法でそれを実行し、期待どおりのオブジェクトで満たされた Vector オブジェクトを返します。とにかくありがとう:)

于 2013-01-25T18:02:16.620 に答える
0

"" を以下のような SOAP_ACTION に置き換えます

 transport.call(SOAP_ACTION, envelope);

また、応答タイプが文字列または配列であることを確認しましたか..

于 2013-01-25T10:42:54.640 に答える