2011-12-17 97 views
4

我正在使用货币转换器应用程序,并且无法获得正确的输出(我得到一个零)。使用KSOAP的Web服务

我正在使用http://www.webservicex.net/ws/WSDetails.aspx?CATID=2&WSID=10的webservice。

的WSDL声明函数为:

<wsdl:types> 
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET/"> 
    <s:element name="ConversionRate"> 
    <s:complexType> 
    <s:sequence> 
    <s:element minOccurs="1" maxOccurs="1" name="FromCurrency" type="tns:Currency"/> 
    <s:element minOccurs="1" maxOccurs="1" name="ToCurrency" type="tns:Currency"/> 
    </s:sequence> 
</s:complexType> 
</s:element> 
<s:simpleType name="Currency"> 
    <s:restriction base="s:string"> 
    <s:enumeration value="AFA"/> 
    <s:enumeration value="ALL"/> 
    <s:enumeration value="DZD"/> 
    <s:enumeration value="ARS"/> 
    <s:enumeration value="AWG"/> 
    <s:enumeration value="AUD"/> 
</s:restriction> 
</s:simpleType> 
<s:element name="ConversionRateResponse"> 
    <s:complexType> 
    <s:sequence> 
    <s:element minOccurs="1" maxOccurs="1" name="ConversionRateResult" type="s:double"/> 
    </s:sequence> 
    </s:complexType> 
    </s:element> 
    <s:element name="double" type="s:double"/> 
    </s:schema> 
</wsdl:types> 

我的Android类:

public class MainActivity extends Activity { 

private static final String NAMESPACE = "http://www.webserviceX.NET"; 

private static String URL = "http://www.webserviceX.NET/CurrencyConvertor.asmx?WSDL"; 
private static final String METHOD_NAME = "ConversionRate"; 
private static final String SOAP_ACTION = "http://www.webserviceX.NET/ConversionRate"; 
private TextView lblResult; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    lblResult = (TextView) findViewById(R.id.result); 

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 


    PropertyInfo propInfo=new PropertyInfo(); 
    propInfo.name="FromCurrency"; 
    propInfo.type=PropertyInfo.STRING_CLASS; 
    propInfo.setValue("AFA"); 


    PropertyInfo propInfo2 = new PropertyInfo(); 
    propInfo2.name="ToCurrency"; 
    propInfo2.type = PropertyInfo.STRING_CLASS; 
    propInfo2.setValue("AUD"); 

    request.addProperty(propInfo); 
    request.addProperty(propInfo2); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

    envelope.setOutputSoapObject(request); 
    envelope.dotNet=true; 

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

    try { 
    androidHttpTransport.call(SOAP_ACTION, envelope); 

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

    lblResult.setText(resultsRequestSOAP.toString()); 


    } catch (Exception e) { 
     lblResult.setText(e.getMessage()); 

    } 

} 

任何人有什么是错的建议吗?

THX!

丹尼尔

回答

1

我觉得你的URL字符串将是:

private static String URL = "http://www.webserviceX.NET/CurrencyConvertor.asmx"; 

而且试试这个:

Object resultsRequestSOAP = envelope.getResponse(); 

,而不是这样的:

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

谢谢!它现在的作品:) – Knaks

+0

将其标记为已回答。 –

+0

@enrmarc我会很高兴,如果你可以看看我的[关于WFS和ksoap2-android的问题](http://stackoverflow.com/questions/9237082/how-to-query-a-web-service-via -post请求功能于机器人)。 – JJD

0

你的服务说明显示,该命名空间是http://www.webserviceX.NET/

尝试把多余的/

+0

嗯,我仍然得到一个0的结果:( – Knaks

+0

你的回应是双值吗? –

+0

首先看看Web服务对于提供的任何种类的货币是否工作正常。如果Web服务存在问题,那么即使不尝试调试代码,也无法真正帮助您。尝试在发出请求并获取响应时插入断点。 –

相关问题