2012-01-12 16 views
0

私は文字列の配列を返すWebサービスからデータを取得しようとしています。 私はそれを行うことができませんでしたので、私はあなたにコードのスニペットを与えます
私は夢中になる助けてください!Ksoap simple array android

public void updateCategories(){ 
     SOAP_ACTION = "http://app.market_helper.com/getCategories"; 
     METHOD_NAME = "getCategories"; 
     Log.i("MESSAGE FROM me", "It's running wtf"); 
     try { 
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11); 
      envelope.setOutputSoapObject(request); 
      HttpTransportSE androidHttpTransport = new HttpTransportSE(
        URL); 
      androidHttpTransport.call(SOAP_ACTION, envelope); 
      SoapObject response = (SoapObject)envelope.getResponse(); 
     Log.i("message to me",""+response.getPropertyCount()); 
     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

私はプリミティブ型からデータを取得できますが、これは少し複雑になります。 これは、Webサービスからの応答は、事前に

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soapenv:Body> 
<getCategoriesResponse xmlns="http://DefaultNamespace"> 
    <getCategoriesReturn>desktop computers</getCategoriesReturn> 
    <getCategoriesReturn>laptop computers</getCategoriesReturn> 
    <getCategoriesReturn>mobile phones</getCategoriesReturn> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    <getCategoriesReturn xsi:nil="true" /> 
    </getCategoriesResponse> 
    </soapenv:Body> 
    </soapenv:Envelope> 

おかげで

+0

をuは解決策がここでそれを投稿得れば.....これをチェックリンクは役に立つかもしれません.. http://ksoap.objectweb.org/project/faq/index.html ...それらに応じて送信と受信ベクトルの使用を介して行われている..しかし、私も私はそれを実装する..それはpls plsはあなたが..を持っている場合のソリューションを共有する –

答えて

2
あなたは response.getProperty(index).toString()で文字列値を取得したりしたい場合は、 response.getPropertyAsString(index)(インデックスはまたの名前に置き換えることができますことができるはずです

プロパティ)。すべての文字列値を取得するには、それらを文字列をリストに追加するループに入れてみてください。

List<String> categories = new ArrayList<String>(); 
int count = response.getPropertyCount(); 

for(int i = 0; i < count; i++) { 
    if(response.getProperty(i) != null) 
     categories.add(response.getPropertyAsString(i)); 
} 

また、リストに追加する前にプロパティがnullでないことも確認してください。

これは機能しますか?

+0

私はデータを受信することを確認するログメッセージを確認することができません 最初のログメッセージが実行されているので、関数が実行されているが、2番目の関数は実行されていないことを確認します。 私を助けてくれてありがとうと私に教えてくれてありがとう? –

+0

関数をデバッグするとどうなりますか? 'HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);'の後に 'androidHttpTransport.debug = true;'を追加してください。次に、デバッグモードでは、androidHttpTransport.call(SOAP_ACTION、envelope);の後に、androidHttpTransport内のresponseDumpとrequestDumpをチェックして、要求と応答をXML形式で表示できます。 – ajgarn

1

このライン:使用する

SoapObject response = (SoapObject)envelope.bodyIn; 

SoapObject response = (SoapObject)envelope.getResponse(); 

に変更する必要があります

response.getProperty(Index);