2013-01-25 46 views
0

嘗試從ksoap getResponse()接收結構化數據時遇到問題;在Android中接收結構化數據KSOAP2

我已經仔細閱讀指導,以發送和接收使用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> 

這是我試圖執行搜索操作,然後得到我上面介紹的對象(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(); 
    } 

} 

搜尋工作正常,但它返回我只有一個目標 - 一個單一的Integer對象(不是數組),這是找到匹配項的searchPhrase的計數。我認爲這是doSearchResponse對象中的第一個位置。但我需要其餘的,尤其是:搜索陣列。我究竟做錯了什麼?是不是這樣處理envelope.call(「和這個字符串在這裏」,...)?

回答

0

你將取代「」到SOAP_ACTION這跟下面給出

transport.call(SOAP_ACTION, envelope); 

,也有你檢查響應類型爲字符串或數組..

+0

我只是不能。來自getResponse()方法的對象是一個Integer類。所以它是definitelty不是一個數組。關於so​​ap_action,我不太清楚,我應該使用哪一個。事實上,無論我放在那裏,輸出對象總是相同的:Integer對象 – Garet

0

我解決它。

問題是版本2.4中的KSOAP2庫。其實我不知道它爲什麼只返回一個Integer對象。但是在版本3.0.0 RC4中,它以與我期望的對象一樣的方式返回Vector對象。所以無論如何感謝:)