2012-01-02 3 views
1

У меня проблема с KSOAP2 для Android с зависимостями на устройстве Android.KSOAP 2 со сложными объектами

я следовал инструкции от seesharpgears http://seesharpgears.blogspot.com/2010/10/ksoap-android-web-service-tutorial-with.html

У меня есть сервер Embarcadero C++ Builder XE2 с этой функцией, чтобы пройти сложный тип данных.

Функция заключается в следующем:

Я попытался создать фиктивный метод ведьмой возвращается его просьбу.

Я создал класс под названием Категория.

Но я не знаю, почему, я получаю до сих пор эти данные с типом данных вектора:

Вот мой код:

public void getSettings(String sessionId){ 
SoapObject Request = new SoapObject(ProgramSettings.NAMESPACE, "GetCategoryById"); 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = false; 
    envelope.setOutputSoapObject(Request); 
    Category C = new Category(); 
    envelope.addMapping("urn:@:TrackNavMobile", "Category",new Category().getClass()); 
// addMapping("urn:@:TrackNavMobile", "Category", cat.getClass()); 
    String url="http://" + readIp() + ":" + readPort() +"/soap/ITrackNavMobile"; 
    HttpTransportSE androidHttpTransport = new HttpTransportSE(url); 
    /* 
    * Call the web service and retrieve result ... how luvly <3 
    * 
    * */ 
    try 
    { 
     androidHttpTransport.call(ProgramSettings.SOAP_ACTION, envelope); 
     SoapObject response = (SoapObject)envelope.bodyIn; 

     //TextView tv = (TextView)findViewById(R.id.textView1); 

     for(int i=0;i<response.getPropertyCount();i++) 
    { 
      new AlertDialog.Builder(this) 
      .setMessage(response.getProperty(0).toString()) 
      .setNeutralButton("OKi", null) 
      .show(); 

     //if complex type is present then you can cast this to SoapObject and if primitive type is returned you can use toString() to get actuall value. 
    } 

    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
}  

Это результат со свойствами ... Когда я отладка вызывает метод setCategory, написанный на Java с правильными значениями ... но не возвращает их. [Категория: [email protected], return: [email protected]]

Это мой манекен для сервера, который называется:

Category* TTrackNavMobileImpl::GetCategoryById(){ 
     Category* setup= new Category(); 
     setup->Name="Thomas"; 
     setup->CategoryId=1; 
     setup->Description="Test1"; 
     return setup; 
} 

Это RequestDump:

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:d="http://www.w3.org/2001/XMLSchema" 
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header /> 
    <v:Body> 
    <n0:GetCategoryById id="o0" c:root="1"  
    sessionId="FFEF196A3940136D7C141C4F01965D7D" 
    xmlns:n0="http://tempuri.org/" /> 
    </v:Body> 
</v:Envelope> 

И это ResponseDump:

<?xml version="1.0"?> 
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:NS1="urn:TrackNavMobile-ITrackNavMobile"> 
    <NS1:GetCategoryByIdResponse xmlns:NS2="urn:@:TrackNavMobile"> 
    <NS2:Category id="1" xsi:type="NS2:Category"> 
     <Name xsi:type="xsd:string">Thomas</Name> 
     <Description xsi:type="xsd:string">Test1</Description> 
     <CategoryId xsi:type="xsd:int">1</CategoryId> 
     </NS2:Category><return href="#1"/> 
    </NS1:GetCategoryByIdResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Кто-то идея?

ответ

0

Вы должны использовать getResponse() вместо bodyIn. Более подробная информация представлена ​​на разных блогах, размещенных на сайте, а также непосредственно на вики. Вам придется реализовать анализ ответа вручную или с помощью сортировки.

+0

Спасибо за ур ответ. Когда я пытаюсь с getResponse, я получаю во время отладки в bodyout.properties setup-> Name = "Thomas"; setup-> CategoryId = 1; setup-> Описание = "Test1"; Категория: Категория {Name = "Thomas"; CategoryId = 1; Описание = «Тест1»; }, return: Категория {Name = "Thomas"; CategoryId = 1; Описание = «Тест1»; }] , но он не выводит их автоматически автоматически. Спасибо –

+0

Это будет зависеть от вас класс категории на стороне java, если отображение работает. Проверьте примеры о сортировке. Существуют различные ссылки на wiki. –

+0

Можете ли вы рассказать мне ссылку о маршаллинге ... do u означают этот: http://code.google.com/p/ksoap2-android/wiki/CodingTipsAndTricks большое спасибо –

0

Не знаю, если это не имеет ничего общего с вашей проблемой, но в примере коде, где вы обхват через свойство ответа и отображаетесь их предупреждения диалогов, вы звоните

.setMessage (response.getProperty (0) .ToString())

, когда он должен быть

.setMessage (response.getProperty (я) .ToString())

+0

У меня было это до того, как я объяснил, тогда я попытался показать Property (0) еще для поиска ошибок. Спасибо, в любом случае! –

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