android 连接WebService

secenet 2011-08-01 02:22:39
在android端调用webService 无参的和基本类型参数的方法都没问题, 现在要调用的是一个带复杂对象类型(List<Object>Object中还包含List<Object>)的方法,主要是提交一些数据到服务器。

一开始按照基本类型的套路调用,提示类型序列化错误(此时应该还没连上服务器),实现KavSerializable依然无效,而如果干脆传一个String过去,报'Server did not recognize the value of HTTP Header SOAPAction: http://serverName/method().' faultactor: 'null' detail: org.kxml2.kdom.Node@43fedc60

同样的WebService为什么带对象类型的对数会拒绝访问呢?

服务器是.net 写的,这个问题困了我一个多星期了,期望成功传过对象类型的前辈给以帮助 ,不甚感激! q258114255

网上的各种方法我查遍了,谢绝copy
...全文
306 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
secenet 2011-08-03
  • 打赏
  • 举报
回复
是不是根本就没有人成功传过对象啊, 强烈鄙视那些乱贴未经测试代码的抄袭者!!!
secenet 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 secenet 的回复:]
同样的WebService为什么带对象类型的对数会拒绝访问呢?
[/Quote]
我意思是 同一个WebService, 为什么带对象类型参数的方法这么仿问起来这么麻烦,而且使用浏览器是拒绝访问的
secenet 2011-08-01
  • 打赏
  • 举报
回复
谢谢关注以下是核心代码:

public static final List<SoapObject> genHotelOrder(HotelOrder ho) {
byte[] bt = objectToByte(ho);
String data = org.kobjects.base64.Base64.encode(bt);//听网上说可以用byte[]方式传参,失败后也没完回来
String methodName = "hotelOrder()";
SoapObject request = new SoapObject(NAME_SPACE, methodName);
PropertyInfo pi = new PropertyInfo();
pi.setName("hotelOrder");
pi.setValue(data);
pi.setType(HotelOrder.class);
request.addProperty(pi);
return core(HOTEL_URL, request, methodName);
}

private final static List<SoapObject> core(String url, SoapObject request,
String methodname) {
try {
HttpTransportSE ht = new HttpTransportSE(url, 22000);// 设置超时时间22秒
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.addMapping(NAME_SPACE, "tns:hotelOrder",
new HotelOrder().getClass());
envelope.addMapping(NAME_SPACE, "tns:ArrayOfOrderRoomPrice",
new OrderRoomInfo().getClass());
envelope.setOutputSoapObject(request);
ht.call(NAME_SPACE + methodname, envelope);
/*下面是得到返回值后的解析,不在此问题范围内*/
request = (SoapObject) envelope.getResponse();
int resultCount = request.getPropertyCount();

List<SoapObject> soapObjects = new ArrayList<SoapObject>();
SoapObject subSO = null;
for (int i = 0; i < resultCount; i++) {
subSO = (SoapObject) request.getProperty(i);
soapObjects.add(subSO);
}
return soapObjects;
} catch (SocketTimeoutException e) {
e.printStackTrace();
return null;// 如果超时,让它返回null,以便告知user是网络问题而不是没有结果
} catch (IOException ea) {
ea.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
return null; // 理由同上
}
return null;
}


dinjay 2011-08-01
  • 打赏
  • 举报
回复
贴下代码吧。
随雨飞翔 2011-08-01
  • 打赏
  • 举报
回复
发送类型和接收类型应该一致的吧,记得不能发送集合的,可以试试发送xml类型的string字符串,C#后台接收到以后解析.
dinjay 2011-08-01
  • 打赏
  • 举报
回复
应该是服务器的接口类型和你客户端调用时传入的参数不一致,而导致的问题。

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧