【问题标题】:How to get the data from soap如何从soap中获取数据
【发布时间】:2014-02-12 12:13:57
【问题描述】:
private final String SOAPACTION="http://www.americanweddinggroup.com/API/PublicJSON/WeddingDetatils";
private final String URL="http://www.americanweddinggroup.com/API/PublicJSON.asmx" ;
private final String NAMESPACE="http://www.americanweddinggroup.com/API/";
private final String METHODNAME="WeddingDetatils";
<?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:Body>
<WeddingDetatils xmlns="http://www.americanweddinggroup.com/API/PublicJSON">
  <EventID>string</EventID>
</WeddingDetatils>
</soap:Body>

  <?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:Body>
<WeddingDetatilsResponse xmlns="http://www.americanweddinggroup.com/API/PublicJSON">
  <WeddingDetatilsResult>
    <eventID>string</eventID>
    <weddingVenue>string</weddingVenue>
    <weddingDate>string</weddingDate>
    <bridesName>string</bridesName>
    <groomsName>string</groomsName>
    <passwordAvailable>string</passwordAvailable>
    <thumbnailImage>string</thumbnailImage>
    <galleryImages>
      <anyType />
      <anyType />
    </galleryImages>
  </WeddingDetatilsResult>
</WeddingDetatilsResponse>
  </soap:Body>
 </soap:Envelope>

上面是肥皂的详细信息。

我是网络服务的新手,所以请帮助我。

这是我试过的

 SoapObject request=new SoapObject(NAMESPACE, METHODNAME);
    request.addProperty("EventID",1);//in soap event value is string

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

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    try {
        androidHttpTransport.call(SOAPACTION, envelope);
        SoapObject response = (SoapObject) envelope.getResponse();
        // SoapPrimitive response1 = (SoapPrimitive) envelope.getResponse();
        System.out.println("No of Datas are "+response.getPropertyCount()+response);//this returns count as 8
        System.out.println("No of Datas are "+response.getAttributeCount()+response);//this returns count as 0

回应是

 anyType{
 eventID=anyType{};
 weddingVenue=anyType{}; 
   weddingDate=anyType{};
 bridesName=anyType{}; 
groomsName=anyType{};
 passwordAvailable=anyType{};
thumbnailImage=anyType{}; 
galleryImages=anyType{};
}

但对于 URL 中的 EventID=1,它会返回

<eventID>1</eventID>
<weddingVenue>The Party Place</weddingVenue>
<weddingDate>4/26/2014 12:00:00 AM</weddingDate>
<bridesName>We have some of the Longest NamesX</bridesName>
 <groomsName>Keith Tessler</groomsName>
<passwordAvailable>False</passwordAvailable>
 <thumbnailImage/>
<galleryImages/>

如何为 eventID=1 获取上述详细信息,例如weddingVenue ="The Party Place"。

【问题讨论】:

    标签: android web-services soap ksoap


    【解决方案1】:

    我建议您为响应创建一个数据类:

    String eventID ="";
    String weddingVenue ="";
    String weddingDate ="";
    String bridesName ="";
    String groomsName ="";
    String passwordAvailable ="";
    String thumbnailImage ="";
    String galleryImages ="";
    

    并将其命名为 MyData。之后,在您的代码之上(在 onCreate 之上)创建一个名为 data.Than 的公共 MyData 对象。而不是替换

    System.out.println("No of Datas are "+response.getPropertyCount()+response);
    System.out.println("No of Datas are "+response.getAttributeCount()+response);
    

    使用将从您的数据类创建对象并填充属性的代码。试试这个;

    androidHttpTransport.call(SOAPACTION, envelope);
    SoapObject response = (SoapObject) envelope.getResponse();
    SoapObject main = (SoapObject)response.getProperty(0); //your xml style does not inclue envelope details so i guess it will require 0th property to reach table
    
    
    data.eventID = main.getProperty("eventID").toString();
    data.weddinVenue = main.getProperty("weddingVenue").toString();
    data.weddinDate = main.getProperty("weddingDate").toString();
    data.bridesName = main.getProperty("bridesName").toString();
    data.groomsName = main.getProperty("groomsName").toString();
    data.passwordAvailable = main.getProperty("passwordAvailable").toString();
    data.galleryImage = main.getProperty("galleryImage").toString();
    

    在此之后,您可以通过编写所需的代码来获取对象的属性。请注意,我可能在此代码中有错误,因为我刚刚将其写下来,并且我没有可用的编辑器。返回给我的 SOAP 对象类型还包括信封详细信息,因此 main = response.getProperty(0) 是一个猜测,希望它有效。我没有使用 ArrayList,因为服务似乎通过提供属性返回 one 婚礼详细信息。希望这会有所帮助,如果我在使用 Eclipse 后出现错误,我会尝试编辑和修复。

    此代码取自我的项目,但我的信封与您的不同。希望对您有所帮助:

    public ArrayList<Haberler> getNewsHeaders(){
    
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
            HttpTransportSE httpTransportSe = new HttpTransportSE(URL);
            httpTransportSe.debug = true;
            SoapObject response = null;
    
            try{
                httpTransportSe.call(SOAP_ACTION, envelope);
                Log.i("call", "call successfull");
                response = (SoapObject)envelope.getResponse();
                SoapObject main = (SoapObject)response.getProperty(1);
                SoapObject list = (SoapObject)main.getProperty(0);
    
                String a = Integer.toString(list.getPropertyCount());
                Log.i("property count", a);
    
                for(int i = 0; i<list.getPropertyCount(); i++){
                    Haberler h = new Haberler();
                    SoapObject nsoap = (SoapObject)list.getProperty(i);
                    if(nsoap != null){
                        h.set_id(Integer.valueOf(nsoap.getProperty("id").toString()));
                        h.set_header(nsoap.getProperty("baslik").toString());
                        h.set_category(nsoap.getProperty("kategori").toString());
                        h.set_abstract(nsoap.getProperty("ozet").toString());
                        h.set_details(nsoap.getProperty("detay").toString());
                        h.set_begindate(nsoap.getProperty("bas_tarihi").toString());
                        h.set_enddate(nsoap.getProperty("bit_tarihi").toString());
                        haberler.add(h);
    
                        Log.i("eklenen haber", h.get_header());
    
                    }
                }
    
            }
            catch(Exception e){
                e.printStackTrace();
            }
    
    
            return haberler;
        }
    

    【讨论】:

    • 它给出异常java.lang.RuntimeException: 非法财产:eventID
    • 你能把书名或网络服务链接(使用肥皂)教程。我会非常感谢你
    • 尝试改变索引,你应该找到正确的。它也可以是 eventID 的 getProperty(1),weddingVenue 的 getProperrty(2) 等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多