没有合适的资源?快使用搜索试试~ 我知道了~
Android调用webservice 并传递实体类.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 70 浏览量
2022-07-06
20:10:45
上传
评论
收藏 19KB DOCX 举报
温馨提示
试读
11页
Android调用webservice 并传递实体类
资源推荐
资源详情
资源评论
本来以为在 java 平台上用 axis2 生成了客户端代理类然后移植到 Android 平台上就好了。没
想到在移植过程中出现了很多问题。说明 JVM 和 android 的 DVM 差距还是很大的。
JVM 执行的是 class 文件,而 DVM 执行的是 dex 文件。
在 eclipse 里面开发 Android 程序的时候在编译时会把 jar 包里面的 class 一个个编译成 DVM
可执行的 dex 文件。当然,有个前提是 jar 包是放在 source folder 里面的。这样 eclipse 才会
在编译程序的时候将 jar 包编译到 apk 文件中去。要不然虽然本地 eclipse 不会报错,但是在
模拟器中会报错 NoClassDefFound。
而且有的 jar 包是不能被 dexdump.exe 正确转换成 dex 文件的。这样就导致这个 jar 包不能
用,后果是整个程序都不能正确运行。
我在将 axis2 移植到 Android 平台上去的时候有一些 jar 包转换不了。然后网上找了很多资料,
都没人解决这个问题。希望如果有人解决了能共享一下下。
后来实在不行了,看网上说在 Android 平台都用 ksoap2 来调用 Web Service。自己觉得解决
不了 axis2 的问题。于是只能改变方向。学习了一下 ksoap2。在 ksoap2 调用 WCF 服务的时
候也出现了很多问题。好在后来慢慢都解决了。现在将我遇到的问题和解决的方案都写下来,
供其他也碰到这些问题的人参考。
下面列举一下我碰到的问题和解决方案
1.调用是参数的说明
view plaincopy to clipboardprint?
01.static String NameSpace="http://tempuri.org/";
02.static String URL="https://10.0.2.2:9001/test";
03.static String SOAP_ACTION="http://tempuri.org/ITestService/GetUser";
04.static String MethodName="GetUser";
static String NameSpace="http://tempuri.org/";
static String URL="https://10.0.2.2:9001/test";
static String SOAP_ACTION="http://tempuri.org/ITestService/GetUser";
static String MethodName="GetUser";
Namespace 是你设置的服务命名空间,一般没有设置就是 http://tempuri.org/
URL 是你服务暴露的地址,通过这个地址可以获取 wsdl。在 android 里面 127.0.0.1 代表的是
模拟器的地址,而 10.0.0.2 代表的才是电脑的 127.0.0.1。所以如果是自己本机做 WCF 服务
器的话,程序里面应该这么设置。
SOAP_ACTION 是你的 wsdl 里面相对应的方法的地址。
MethodName 就是 SOAP_ACTION 最后面的那个指明 ACTION 的方法名。
2.参数传递 复杂对象
服务里面不可避免的是会传递参数,但是在可能在 wcf 服务端可能解析不了你传的参数。通
过 tcptrace 截取 soap 后发现是参数的 namespace 不对应的原因。下面是一个例子
服务端代码:
view plaincopy to clipboardprint?
01.User ITestService.GetUser(User u)
02. {
03. User user = new User();
04. user.UId = "Server:" + u.UId;
05. user.UName = "Server:" + u.UName;
06. return user;
07. }
User ITestService.GetUser(User u)
{
User user = new User();
user.UId = "Server:" + u.UId;
user.UName = "Server:" + u.UName;
return user;
}
User 类:
view plaincopy to clipboardprint?
01.[DataContract]
02. public class User
03. {
04. [DataMember]
05. public string UId;
06. [DataMember]
07. public string UName;
08. }
[DataContract]
public class User
{
[DataMember]
public string UId;
[DataMember]
public string UName;
}
android 客户端代码如下:
view plaincopy to clipboardprint?
01.SoapObject requet=new SoapObject(NameSpace,MethodName);
02.
03. PropertyInfo perPropertyInfo=new PropertyInfo();
04. User user=new User();
05. user.setUId("123");
06. user.setUName("cch");
07. perPropertyInfo.setName("u");
08. perPropertyInfo.setValue(user);
09. perPropertyInfo.setType(User.class);
10. requet.addProperty(perPropertyInfo);
11.
12. SoapSerializationEnvelope envelope=new
SoapSerializationEnvelope(SoapEnvelope.VER11);
13. envelope.addMapping(User.NAMESPACE,"User",User.class);//register 这个很重要
14. envelope.setOutputSoapObject(requet);
15. envelope.dotNet=true;
16. AndroidHttpTransport transport=new AndroidHttpTransport (URL);
17.
18. ClientUtil.SetCertification(); //设置证书
19. try {
20.
21. transport.call(SOAP_ACTION,envelope);
22.//
23. SoapObject response=(SoapObject)envelope.getResponse();
24.//
25. //PraseXML_SF(response);
26.
((TextView)findViewById(R.id.txt01)).setText(String.valueOf(response.toString()));
27. } catch (IOException e) {
28. // TODO Auto-generated catch block
29. e.printStackTrace();
30. } catch (XmlPullParserException e) {
31. // TODO Auto-generated catch block
32. e.printStackTrace();
33. }
SoapObject requet=new SoapObject(NameSpace,MethodName);
PropertyInfo perPropertyInfo=new PropertyInfo();
User user=new User();
user.setUId("123");
user.setUName("cch");
剩余10页未读,继续阅读
资源评论
oligaga
- 粉丝: 50
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- #P0015. 全排列 超级简单
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功