2012-01-12 3 views
0

Я пытаюсь получить данные из веб-службы, которая возвращает массив строк. Я не мог этого сделать, поэтому даю вам фрагмент кода
, пожалуйста, помогите мне. Я схожу с ума!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(); 
     } 
    } 

Я могу получить данные из примитивных типов, но это немного сложнее. это ответ от веб-сервиса

<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 ... в соответствии с ними отправка и получение должны выполняться с использованием векторов .. но даже я ld реализовать его .. так 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

Я не могу видеть сообщение журнала, чтобы убедиться, что Im получение данных так в чем проблема там первое сообщение журнала работает Я пишу это, чтобы быть что функция работает, а вторая - нет. спасибо, что помогли мне и, пожалуйста, скажите мне wtf? –

+0

Что происходит при отладке функции? Добавьте 'androidHttpTransport.debug = true;' после строки 'HttpTransportSE androidHttpTransport = new HttpTransportSE (URL);'. Затем, в режиме отладки, вы можете после «androidHttpTransport.call (SOAP_ACTION, конверт)», проверить на responseDump и requestDump внутри вашего androidHttpTransport, чтобы просмотреть запрос и ответ в формате XML. – ajgarn

1

Эта линия:

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

должен быть изменен на:

SoapObject response = (SoapObject)envelope.bodyIn; 

использовать:

response.getProperty(Index);