在Android中接收结构化数据KSOAP2

时间:2013-01-25 09:37:31

标签: android ksoap

我在尝试从ksoap getResponse();

接收结构化数据时遇到问题

我已经仔细阅读了使用网站上的SoapObjects发送和接收数据的指南:link to site

我正在使用此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>

这是te代码我正在尝试执行搜索操作,然后获取上面提到的对象(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();
    }

}

搜索工作正常,但它只返回一个Object - 一个Integer对象(不是数组),它是searchPhrase找到的匹配项的计数。我认为这是doSearchResponse对象中的第一个位置。但我需要其余的,特别是:搜索阵列。我究竟做错了什么?这不是处理envelope.call(“和这里的字符串”,......)?

2 个答案:

答案 0 :(得分:0)

您将把“”替换为SOAP_ACTION,如下所示

 transport.call(SOAP_ACTION, envelope);

并且您还检查了响应类型是字符串还是数组..

答案 1 :(得分:0)

我解决了。

问题是版本2.4中的KSOAP2库。实际上我不知道它为什么只返回一个Integer对象。但在版本3.0.0 RC4做它同样的方式它返回我Vector对象满足我期望的对象。无论如何,谢谢:))