我使用asmx web服务在c#over android设备上写入。
我建立连接,在某些web方法中我需要整数或字符串之类的输入参数,所有工作都很好,但问题是当web方法需要日期时,我尝试以多种格式发送日期但总是有问题得到答案
我需要发送日期对象,还是喜欢字符串? Web服务查看日期可能与其他内容类似吗?
这是与网络服务“沟通”的方法:
public void connectSOAP()
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
String dateStr = "04/05/2010";
Date dateObj=null;
SimpleDateFormat curFormater = new SimpleDateFormat("dd/mmm/yyyy");
try
{
dateObj = curFormater.parse(dateStr);
}
catch (java.text.ParseException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
request.addProperty("dtFrom",dateObj);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
try
{
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
if (envelope.getResponse() != null)
{
if (envelope.bodyIn instanceof SoapFault)
{
String str = ((SoapFault) envelope.bodyIn).faultstring;
Log.i("", str);
}
else
{
SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
Log.d("WS", String.valueOf(resultsRequestSOAP));
}
};
}
catch (Exception e)
{
Log.d("WS","sss");
}
}
当我改变web方法(其中有一些日期工作),我在日志中得到响应)但是这样的日期我只是在日志中得到catch(“sss”),我调试并发现它制动: androidHttpTransport.call(SOAP_ACTION,envelope);
但我没有在日志中找到任何关于它的东西,除了我设置的捕获......
答案 0 :(得分:0)
对我来说,这看起来像你想要给web服务的dateObj无法解析,这就是为什么在这一行发生异常的原因:
androidHttpTransport.call(SOAP_ACTION, envelope);
但是因为你的格式化程序有这种格式:
SimpleDateFormat curFormater = new SimpleDateFormat("dd/mmm/yyyy");
也许(三个!)" mmm"导致错误?我很确定这会产生类似于"二月"对于二月等等...(例如" 11 / Feb / 2014"):
尝试类似:
SimpleDateFormat curFormater = new SimpleDateFormat("dd/mm/yyyy");
或
SimpleDateFormat curFormater = new SimpleDateFormat("dd/MM/yyyy");
顺便说一句,为了避免本地化和互操作性问题,我经常使用精确格式化为Strings的DateTime对象将这些对象提供给WebService。因为很多次我通过例如互操作性之间存在问题。 .asmx Webservice和J2EE Web服务(例如,对于J2EE和.NET,DateTime的范围是不同的,如果它是null / nil值,你也会遇到麻烦)。