android - 如何从 SOAP 中获取数据

标签 android web-services soap ksoap

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>

以上是 SOAP 的详细信息。

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

这是我试过的

 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"。

最佳答案

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

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

并将其命名为 MyData。之后,在名为 data 的代码之上(在 onCreate 上方)创建一个公共(public) 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 上遇到错误,我会尝试编辑和修复。

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

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;
    }

关于android - 如何从 SOAP 中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21727654/

相关文章:

PHP 和 XPath 循环

android - getApplicationContext() 使用时抛出异常

web-services - jax-ws 关于端点接口(interface)

python - azure ml 实验返回与 webservice 不同的结果

c# - Web 服务 VS。 Aspx 页面 : Pros and Cons

c# - 在客户端拦截来自和发往 Web 服务的 SOAP 消息

android - 我可以将 Smooch.io 用于与其提供的不同的 NLP 吗?

java - 通过 Java 访问 fragment 中的 CalendarView

Android Eclipse - 表格行按钮 - 格式问题

PHP SoapClient 无法处理重定向到 https