2014-12-10 2 views
1

После нескольких учебных пособий (практически во всех учебных пособиях по Фаренгейту до Цельсия) я по-прежнему не понимаю, как на самом деле получить нужные мне данные и настроить запрос должным образом. Основная проблема становится внутри заголовка и придание ему PARTNERID внутри <AccountInfo/>.Android: как получить данные из заголовка и тела с помощью KSOAP2

мне нужно дать ему следующие параметры в теле запроса:

<keyword>string</keyword> 
<records>int</records> 
<startingRecord>int</startingRecord> 
<searchOptions>ID</searchOptions> 

Может кто-нибудь объяснить, как добиться этого ?

POST /service/searchapi.asmx HTTP/1.1 
Host: uk.company.com 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "http://api.company.com/service/SearchByKeyword" 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
    <CompanyHeader xmlns="http://api.company.com/service"> 
     <AccountInfo> 
     <PartnerID>string</PartnerID> 
     </AccountInfo> 
    </CompanyHeader> 
    </soap:Header> 
    <soap:Body> 
    <SearchByKeyword xmlns="http://api.company.com/service"> 
     <keyword>string</keyword> 
     <records>int</records> 
     <startingRecord>int</startingRecord> 
     <searchOptions>ID</searchOptions> 
    </SearchByKeyword> 
    </soap:Body> 
</soap:Envelope> 
+0

Не препятствуйте вам, но андроид не имел поддержки SOAP в прошлом, и я не могу найти что-либо об этом, поддерживаемом сейчас. Есть куча сторонних библиотек, которые помогут вам в этом, но SOAP очень сильно развивается по сравнению с JSON и андроидными изменениями настолько быстро, что этим библиотекам, похоже, нелегко идти в ногу. Если вы также настраиваете webservice, тогда вам лучше с JSON и, возможно, библиотекой преобразования GSON в моем опыте, если вам не удастся. –

+0

К сожалению, веб-служба уже существует, и они не намерены ее изменять:/Я нашел несколько похожих примеров запросов, но все они имеют другое форматирование в соответствии с показанным в вопросе. Заголовок, в частности, проблематичен. Многие из учебных пособий, похоже, не показывают или не объясняют, как это достигается для более сложного примера, чем преобразователь температуры, так что я немного потерял его с уменьшением. В предыдущем проекте участвовал JSON, и я бы хотел, чтобы это тоже было ахаха. Спасибо за ответ вне зависимости – devchimp

+0

Ouch. Я перепутал с SOAP примерно неделю назад, я помню, что основная проблема заключалась в том, что вам нужно DTD для правильной интерпретации сообщений, так как это не RESTful, но андроид изначально использует скомпилированный xml, а не фактический xml, поэтому нет поддержки для добавления DTD для ресурсов разумным образом. Вам придется добавить его в активы, а затем запустить стороннюю библиотеку для работы с вашей другой сторонней библиотекой для интерпретации сообщений SOAP или чего-то запутанного, неподотчетного и высокопроизводительного. Было бы проще настроить еще один веб-сервис, который преобразует SOAP в JSON. –

ответ

0

Дайте этому ходу все, что вам нужно сделать, это ввести правильные значения, а затем поместить их в AsyncTask или что-то в этом роде. В первый раз, когда я сделал soap, у меня была аналогичная проблема, и мне потребовалось довольно много времени, чтобы понять все, но пальцы скрещены, это должно работать!

 Element[] header = new Element[1]; 
     header[0] = new Element().createElement(NAMESPACE, "CompanyHeader"); 

     Element accountInfo = new Element().createElement(NAMESPACE, "AccountInfo"); 
     header[0].addChild(Node.ELEMENT, accountInfo); 

     Element apiKey = new Element().createElement(NAMESPACE, "PartnerID"); 
     apiKey.addChild(Node.TEXT, "String"); 
     accountInfo.addChild(Node.ELEMENT, apiKey); 

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     PropertyInfo keyword =new PropertyInfo(); 
     keyword.name = "keyword"; 
     keyword.setValue("string"); 
     request.addProperty(keyword); 

     PropertyInfo records =new PropertyInfo(); 
     records.name = "records"; 
     records.setValue(int); 
     request.addProperty(records); 

     PropertyInfo startingRecord =new PropertyInfo(); 
     startingRecord.name = "startingRecord"; 
     startingRecord.setValue(int); 
     request.addProperty(startingRecord); 

     PropertyInfo searchOptions =new PropertyInfo(); 
     searchOptions.name = "searchOptions"; 
     searchOptions.setValue(string); 
     request.addProperty(searchOptions); 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope 
       .VER11); 
     envelope.dotNet = true; 
     envelope.implicitTypes = true; 
     envelope.setAddAdornments(false); 
     envelope.headerOut = header; 
     envelope.bodyOut = request; 

     HttpTransportSE ht = getHttpTransportSE(); 

     try { 
      ht.call(SOAP_ACTION, envelope); 
     } catch (HttpResponseException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (XmlPullParserException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (envelope.getResponse() != null) { 
        SoapObject result = (SoapObject)envelope.getResponse(); 
        Log.e("Results = ", String.valueOf(results)); 
       } 
      } catch (SoapFault e) { 
       e.printStackTrace(); 
      } 
     } 
+0

Noice! Спасибо, спасибо. – devchimp

 Смежные вопросы

  • Нет связанных вопросов^_^