2012-04-03 2 views
0

Я много искал, но не нашел никакой помощи, поэтому я надеюсь, что кто-то может пролить свет на этот вопрос.Android KSoap2 Ответ от массива сервера пуст

Я хочу послать массив с помощью KSoap и я делаю это следующим образом:

Сначала я создать объект мыло, как это:

SoapObject request = new SoapObject(GENERICNAMESPACE, SOAP_METHOD_NAME); 

PropertyInfo attr = new PropertyInfo(); 
     attr.name = "patientLogin"; 
     attr.type = PropertyInfo.STRING_CLASS; 
     attr.namespace = GENERICNAMESPACE; 
     attr.setValue(patientId); 
     request.addProperty(attr); 

     //could be patientPassword 
     attr = new PropertyInfo(); 
     attr.name = "passwd"; 
     attr.type = PropertyInfo.STRING_CLASS; 
     attr.namespace = GENERICNAMESPACE; 
     attr.setValue(patientPassword); 
     request.addProperty(attr); 

     Vector vectorOfIDsRead = new Vector(); 
     vectorOfIDsRead.addElement(idsRead); 

     attr = new PropertyInfo(); 
     attr.name = "IDsRead"; 
     attr.type = PropertyInfo.STRING_CLASS; 
     attr.namespace = GENERICNAMESPACE; 
     attr.setValue(vectorOfIDsRead); 
     request.addProperty(attr); 

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
       SoapEnvelope.VER10); 
     envelope.setOutputSoapObject(request); 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(GENERICURL); 
     androidHttpTransport.debug = true; 
     try { 
      androidHttpTransport.call(GENERICSOAP_ACTION_URL+"feedbackRead", envelope); 

      SoapPrimitive resultsRequestSOAP = (SoapPrimitive) envelope 
        .getResponse(); 

      //log request 
      Log.e("SendFeedbackRead", "/////////////////////RequestDump////////////////////"); 
      Log.e("SendFeedbackRead", androidHttpTransport.requestDump.toString());  
      Log.e("SendFeedbackRead", "/////////////////////////////////////////"); 

      //log request 
      Log.e("SendFeedbackRead", "///////////////////ResponseDump/////////////////"); 
      Log.e("SendFeedbackRead", androidHttpTransport.responseDump.toString());   
      Log.e("SendFeedbackRead", "/////////////////////////////////////////"); 

      Log.e("FeedbackRead", 
        "FeedbackRead : " + resultsRequestSOAP.toString()); 

      return resultsRequestSOAP.toString(); 
     } catch (Exception e) { 
      Log.e("FeedbackRead", "SENDFEEDBACKREAD : " + e); 
      return e.getMessage(); 
     } 

Запрос свалка показывает, что я посылаю:

<v:Envelope xmlns:i="http://www.w3.org/1999/XMLSchema-instance" xmlns:d="http://www.w3.org/1999/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header /> 
<v:Body> 
<n0:feedbackRead id="o0" c:root="1" xmlns:n0="http://testing.starburst.com/GenericWS"> 
<n0:patientLogin i:type="d:string">patient1</n0:patientLogin> 
<n0:passwd i:type="d:string">pat1</n0:passwd> 
<n0:IDsRead i:type="c:Array" c:arrayType="d:anyType[1]"><item i:type="d:string">1234test</item></n0:IDsRead></n0:feedbackRead> 
</v:Body> 
</v:Envelope> 

Но ответ, который я получаю, указывает, что список пуст.

обратная связьНаписать пустой список идентификаторов!

Это не так, как есть одно значение.

Может ли кто-нибудь указать мне в правильном направлении?

Спасибо.

ответ

0

Я думаю, ваша ошибка здесь:

Vector vectorOfIDsRead = new Vector(); 
vectorOfIDsRead.addElement(idsRead); 
attr = new PropertyInfo(); 
attr.name = "IDsRead"; 
attr.type = PropertyInfo.STRING_CLASS; 
attr.namespace = GENERICNAMESPACE; 
attr.setValue(vectorOfIDsRead); 
request.addProperty(attr); 

Вы объявляете vectorOfIDsRead как Vector но вы поставите тип как STRING_CLASS. Было бы:

attr.setType(vectorOfIDsRead.getClass()); 

А потом:

... create the envelope ... 
envelope.addMapping(NAMESPACE, "IDsRead", new Vector().getClass()); 

Надеется, что это помогает. Также взгляните на это: http://code.google.com/p/ksoap2-android/wiki/CodingTipsAndTricks#sending/receiving_array_of_complex_types_or_primitives

EDIT: Во всяком случае, не могли бы вы поместить подпись метода вашего SOAP_METHOD_NAME?

+0

Спасибо за ваш вклад. Я попытался изменить различия, которые вы сделали в моем коде, но это не помогло, после чего я последовал за учебником. Опять же, никакого результата. Имя метода - SOAP_METHOD_NAME = "feedbackRead". –

+0

Зачем возникает эта ошибка? Для меня очевидно, что вектор не пуст. Каковы причины, по которым сервер не видит этого? Ответ был изменен, чтобы показать, какой список идентификаторов соответствует серверу: 04-03 19: 22: 17.082: E/SendFeedbackRead (18129): <обратная связьRead_Result> feedbackRead, пустой отправленный список идентификаторов! имеет эти значения , который не является списком идентификаторов. Я думаю, что ответ на мою проблему лежит там. –

+0

По сигнатуре метода я имею в виду количество и типы параметров метода «feedbackRead». (Извините за мой английский). Я не знаю другого способа передать массив. –

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