ksoap2android
⑴ KSOAP2 Android怎么提交复杂参数
使用JSON之类方法对数据进行编码,就可以传递复杂的数据了。 服务器收到数据之后,对数据进行解码。然后就可以还原到对象。 然后就可以使用了。 PS:楼主以为只有XML可以,其实JSON比XML更精简,比XML的体积更校
⑵ ksoap2 android 我想向服务的传一个ArrayList<T> 怎么传 求答案
把ArrayList<T>转换成Json或者XML.再传过去..然后在接口这端解析.
⑶ 求助安卓使用KSOAP2出错
你好,看下,不知道有用吗
1. 必须确保应用已经添加了网络通信权限
<uses-permission android:name="android.permission.INTERNET" />
2. soap请求的URL中的HOST部分不要使用ip地址,使用域名
3. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
中的SOAP VER要和服务端对应,也可以低于服务端,但是不能高于服务端。
上述三点缺一不可,我讲述一下我的折腾过程供大家参考,
我最初由于马虎,没有做条件1 ,结果会报UnkownHostException,误导我把域名改为IP,
把域名改为IP后,虽然不会报UnkownHostException了,但是会报缺少权限,于是我加上条件1的权限,
加完之后,一切都正确,就总是报 org.xmlpull.v1.XmlPullParserException: expected: START_TAG ,
于是尝试修改SOAP信封版本,VER10 VER11 VER12 三种都试了,无效。
回忆起曾把请求URL中的域名改为IP,于是将IP改回域名,问题解决。
仔细看了一下服务端的版本,是VER11,于是尝试用VER12发送请求,
又报org.xmlpull.v1.XmlPullParserException: expected: START_TAG 了。
尝试用VER10,可以收到正确的response。
⑷ android 环境下 ksoap2 连接webservice.
1. 必须确保应用已经添加了网络通信权限
<uses-permission android:name="android.permission.INTERNET" />
2. soap请求的URL中的HOST部分不要使用ip地址,使用域名
3. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
中的SOAP VER要和服务端对应,也可以低于服务端,但是不能高于服务端。
上述三点缺一不可,我讲述一下我的折腾过程供大家参考,
我最初由于马虎,没有做条件1 ,结果会报UnkownHostException,误导我把域名改为IP,
把域名改为IP后,虽然不会报UnkownHostException了,但是会报缺少权限,于是我加上条件1的权限,
加完之后,一切都正确,就总是报 org.xmlpull.v1.XmlPullParserException: expected: START_TAG ,
于是尝试修改SOAP信封版本,VER10 VER11 VER12 三种都试了,无效。
回忆起曾把请求URL中的域名改为IP,于是将IP改回域名,问题解决。
仔细看了一下服务端的版本,是VER11,于是尝试用VER12发送请求,
又报org.xmlpull.v1.XmlPullParserException: expected: START_TAG 了。
尝试用VER10,可以收到正确的response。
⑸ android ksoap2 有没有帮助文档的
您好,很高兴为您解答。
看下这个:http://ksoap2.sourceforge.net/doc/api/
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
⑹ Android 使用KSOAP2调用axis2+rampart的webservice
使用KSOAP2调用WebService 按如下6步来调用WebService的方法。
1. 指定WebService的命名空间和调用的方法名,代码如下:
SoapObject request = new SoapObject("http://service", "getName");
SoapObject类的第1个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第2个参数表示要调用的WebService方法名。
2. 设置调用方法的参数值,这一步是可选的,如果方法没有参数,可以省略这一步。设置方法的参数值的代码如下:
request.addProperty("param1", "value1");
request.addProperty("param2", "value2");
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
3. 生成调用WebService方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码如下:
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协 议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置 SoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第1步创建的SoapObject对象。
4. 创建HttpTransportSE对象。通过HttpTransportSE类的构造方法可以指定WebService的WSDL文档的URL,代码如下:
HttpTransportSE ht =
new HttpTransportSE("http://192.168.17.156:8080/axis2/services/SearchProctService?wsdl");
5. 使用call方法调用WebService方法,代码如下:
ht.call(null, envelope);
call方法的第1个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。
6. 使用getResponse方法获得WebService方法的返回结果,代码如下:
SoapObject soapObject = (SoapObject) envelope.getResponse();
⑺ android中ksoap2中不能序列化byte吗
ksoap2-android和cxf服务连接时的序列化问题处理
目前项目要用到webservice来和后端交互,后端使用的cxf编写,用的jaxb做序列化。当中遇到了ksoap2-android发出的报文不能被正确解析的问题,遂在这里发文以共享。
当中一共遇到了3个问题:
(1)命名空间前缀的问题
(2)复杂对象的命名问题
最后一个问题容易解决,在此逐一说明:
(1)命名空间前缀的问题:
在webservice中,一个请求报文能够被正确解析,报文的格式是首先的。在其官网提供的资料中,一般很少提及服务端是什么类型,网上有见到用axis做服务端的。不过,由于cxf本身的一些较好特性,我们的项目中使用了cxf。ksoap2-android提供了一个开关项Dotnet来控制一个元素是否添加名字空间前缀,来解决兼容性问题。但是, 在调试过程中发现,在请求包的body元素的第一层元素,就是调用方法元素上,如果不携带命名空间,对端无法正确解析,这是因为cxf在发布WSDL时,其中的元素都带有命名空间,而此时使用的Dotnet开关是true,也许是设计者习惯于这种方式吧,其实按照字面理解,此时应当是:true表明要兼容DOTNET,所以会加上命名空间前缀,而false表明不需要兼容,则不加前缀。不过这个问题无伤大雅。
改变开关后,所有元素都加上了前缀,但是参数部分又无法解析,根据错误信息判断是参数部分不能使用加前缀方式来标明命名空间,而应使用属性方式。
此问题的解决是下载了其源码包,并从原来的SoapSerializationEnvelope和SoapObject分别派生新的子类。
SoapSerializationEnvelope的序列化时,读取带序列化对象的Dotnet参数来确定是否使用前缀方式的命名空间。SoapObject的派生对象则相应的添加Dotnet属性供序列化方法读取。这样的话,就是分开处理的策略,从而解决了这个问题。
(2)复杂对象的命名问题
调用参数的添加官方文档给了示例,但是不够明确详尽,在这里补充之:请求包的参数元素的名字应当和其在WSDL中的方法描述中的名字一致。对此,在构建请求的对象时,将SoapObject以相应名称的Property添加即可。对于复杂类型对象,在构建对应的SoapObject时,其第二个参数要使用短类名类进行。有的文档中在给出实例时,称第二个参数为methodname,是不对的,其应当是elementName的含义。
⑻ android studio 用ksoap2调用webservice 求实例
下是调用的几个主要的方法:
1.创建HttpTransportSE传输对象:HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); SERVICE_URL是webservice提供服务的url
2.使用SOAP1.1协议创建Envelop对象:SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 设置SOAP协议的版本号,根据服务端WebService的版本号设置。
3.实例化SoapObject对象:SoapObject soapObject = new SoapObject(SERVICE_NAMESPACE, methodName); 第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。
4.设置调用方法的参数值,如果没有参数,可以省略:例如soapObject.addProperty("theCityCode", cityName);
5.记得设置bodyout属性 envelope.bodyOut = soapObject;
6.调用webservice:ht.call(SERVICE_NAMESPACE+methodName, envelope);
7.获取服务器响应返回的SOAP消息:
SoapObject result = (SoapObject) envelope.bodyIn;
SoapObject detail = (SoapObject) result.getProperty(methodName+"Result");
⑼ 我的Java程序中导入ksoap2-android jar包,studio提示没有主清单属性,在工程libs文件加下已显示添加的包
刷新了吗:
这里有没有添加进编译