2012-01-30 14 views
5

Basit bir seri hale getirilmiş bir nesne döndüren bir .Net Web Hizmeti var.SoapObject'i nesnelere nasıl koyabilir veya pasaj yapabilirim?

.Net webservice adresinden yanıt almak için aşağıdaki kodu aldım. Döndürülen XML'i nesneme nasıl geri gönderebilirim?

SoapPrimitive yerine MyObject öğesini döndürmek istiyorum.

private static SoapPrimitive callWebServiceMethod(String url, 
      String namespace, String methodName, 
      HashMap<String, Object> parameters, String soapAction) 
      throws Exception { 

     Log.i("WebService", "URL: " + url); 
     Log.i("WebService", "MethodName: " + methodName); 

     URL myurl = new URL(url); 
     URLConnection connection = myurl.openConnection(); 
     connection.setConnectTimeout(20 * 1000); 
     HttpURLConnection httpConnection = (HttpURLConnection) connection; 
     int responseCode = httpConnection.getResponseCode(); 
     if (responseCode == HttpURLConnection.HTTP_OK) 
     { 
      httpConnection.disconnect(); 
      SoapObject request = new SoapObject(namespace, methodName); 

      if (parameters != null) { 
       String[] keys = new String[0]; 
       keys = (String[]) parameters.keySet().toArray(keys); 
       Object[] vals = (Object[]) parameters.values().toArray(); 

       for (int i = 0; i < parameters.size(); i++) { 
        request.addProperty(keys[i], vals[i]); 
        Log.i("WebService", keys[i] + ": " + vals[i]); 
       } 
      } 

      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11); 
      envelope.dotNet = true; 

      envelope.setOutputSoapObject(request); 
      HttpTransportSE androidHttpTransport = new HttpTransportSE(url, 
        TimeOutInSeconds * 1000); 

      androidHttpTransport.call(soapAction, envelope); 
      return (SoapPrimitive) envelope.getResponse(); 
     } 
     else 
     { 
      httpConnection.disconnect(); 
      throw new Exception(
        "Http Error code: " + String.valueOf(responseCode)); 
     } 

    } 

cevap

2

Ben de anlamıyorum ama ben size yöntem özel sınıfına yerine SABUN nesne nesne döndürmesi gerekir diliyorum düşünüyorum.

yüzden böyle benim benzer işlevinde yapmış ..

SoapObject soapObject = (SoapObject) envelope.getResponse(); // SOAP Object 
    realTimeUtil = new RealTimeUtil(); // CUSTOM Object of My Class 
     if(soapObject.hasProperty("diffgram")) 
      soapObject = (SoapObject) soapObject.getProperty("diffgram"); 
       if(soapObject.hasProperty(clientName)){ 
        soapObject = (SoapObject) soapObject.getProperty(clientName); 
         for (int i = 0 ; i<soapObject.getPropertyCount(); i++){ 
           if(soapObject.hasProperty(clientName)){       
           SoapObject soapObject1 = (SoapObject) soapObject.getProperty(i); 
            if(soapObject1.hasProperty("Site")){ 

             String site = soapObject1.getProperty("Site").toString(); 
             String dateTime = soapObject1.getProperty("DateTime").toString(); 
             String clicks =soapObject1.getProperty("Clicks").toString(); 
             String orders = soapObject1.getProperty("Orders").toString(); 
             String reveneue = soapObject1.getProperty("Revenue").toString(); 
             String items = soapObject1.getProperty("Items").toString(); 

             realTimeUtil.setSite(site); 
             realTimeUtil.setClicks(clicks); 
             realTimeUtil.setDateTime(dateTime); 
             realTimeUtil.setOrders(orders); 
             realTimeUtil.setRevenue(reveneue); 
             realTimeUtil.setItem(items); 
                           } 
          } 
         } 
       } 
     return realTimeUtil; 

RealtimeUTil birkaç değişkenlerle Uygulamamda sayıda Özel sınıfını ve bu alıcı ayarlayıcı yöntemleri var.

+1

Özelliklerde döngü yerine yanıt XML'i serileştirme için başka herhangi bir yöntem var mı? SOAP ayrıştırma ile – breceivemail

+0

artık deneyim .. :) – MKJParekh