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", ...) を処理するためのものではありませんか?