android客户端传递复杂参数给webservice
2014-08-05 09:21
344 查看
1.Webservice开发
Webservice由wcf开发完成,我不懂,大概说一下会用到哪些。就在下图中,解释一下下图,是服务器自动生成的,通过URL(http://192.168.13.95:8086/UIServices)在浏览器中打开是这样的,程序中用到的就是URL和namespace,以及方法名,图1的namespace1里面定义的是方法名,namespace2里面定义的是各种数据结构在图4中(特别注意两个命名空间)。图1和图2是一个文件,属于namespace1,图3和图4是一个文件属于namespace2.
图1
图2
图3
图4
图4中的数据结构在c#中是下面这样定义的,生成wsdl文件后就如图4一样
2.android调用
a) 首先要下载添加jar包:ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar,需要在网上下载现在应该到3.0的版本了。
b) 在android中,直接传递给ws参数时支持四种基本类型:int、String、boolean、long,传递基本类型时无须序列化,传递数组是需要继承vector(后面会讲到),而且需要序列化(序列化具体我也不知道,有兴趣的可以研究下)。
c) 调用ws的方法时需要传递相同类型的参数,基本类型就不多说了,还有一种是传递json串,比较简单,这里说一下复杂类型。比如上面的Caption方法,它的参数(图上没有标明)就是CaptionInfo类的对象,那么在android中如何定义一个同类型的呢,首先要定义Caption类,要实现KvmSerializable,是为了序列化,这些参数要和c#中的一样,set和get方法可以不要。
d) 注意那几个继承下来的方法:里面case的顺序要和图4中的各属性顺序一样,case 0:必须是BlackColor,依次类推。getPropertyInfo中的arg2.namespace = 图1中的namespace2,也就是图3中的namespace这个很重要
e) 构造列表,android不支持List,所以要用vector代替,而且必须序列化,数组也是这样定义的
f) 封装成CaptionInfo类,每层都要序列化,此时参数(下面有代码)算是构造好了,然后是调用
g) 下面是调用的主要代码,以及类的写法
CaptionInfo的定义:
Webservice由wcf开发完成,我不懂,大概说一下会用到哪些。就在下图中,解释一下下图,是服务器自动生成的,通过URL(http://192.168.13.95:8086/UIServices)在浏览器中打开是这样的,程序中用到的就是URL和namespace,以及方法名,图1的namespace1里面定义的是方法名,namespace2里面定义的是各种数据结构在图4中(特别注意两个命名空间)。图1和图2是一个文件,属于namespace1,图3和图4是一个文件属于namespace2.
图1
图2
图3
图4
图4中的数据结构在c#中是下面这样定义的,生成wsdl文件后就如图4一样
2.android调用
a) 首先要下载添加jar包:ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar,需要在网上下载现在应该到3.0的版本了。
b) 在android中,直接传递给ws参数时支持四种基本类型:int、String、boolean、long,传递基本类型时无须序列化,传递数组是需要继承vector(后面会讲到),而且需要序列化(序列化具体我也不知道,有兴趣的可以研究下)。
c) 调用ws的方法时需要传递相同类型的参数,基本类型就不多说了,还有一种是传递json串,比较简单,这里说一下复杂类型。比如上面的Caption方法,它的参数(图上没有标明)就是CaptionInfo类的对象,那么在android中如何定义一个同类型的呢,首先要定义Caption类,要实现KvmSerializable,是为了序列化,这些参数要和c#中的一样,set和get方法可以不要。
d) 注意那几个继承下来的方法:里面case的顺序要和图4中的各属性顺序一样,case 0:必须是BlackColor,依次类推。getPropertyInfo中的arg2.namespace = 图1中的namespace2,也就是图3中的namespace这个很重要
e) 构造列表,android不支持List,所以要用vector代替,而且必须序列化,数组也是这样定义的
f) 封装成CaptionInfo类,每层都要序列化,此时参数(下面有代码)算是构造好了,然后是调用
g) 下面是调用的主要代码,以及类的写法
<pre name="code" class="java">String nameSpaceString = "http://tempuri.org/";//图1中的namespace1 String methodName = "Cantion"; String urlString = "http://192.168.13.95:8086/UIServices";//url String soapAction = "http://tempuri.org/IUI/Cantion";//图2中的soapAction CaptionInfo captionInfo = new CaptionInfo(); SoapObject requests = new SoapObject(nameSpaceString, methodName); requests.addProperty("message", captionInfo );//message 是服务器中方法的参数 //名,最好保持一致 SoapSerializationEnvelope envelopes = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelopes.addMapping(CaptionInfo.NAMESPACE, "Caption", Caption.class); envelopes.addMapping(CaptionInfo.NAMESPACE, "ArrayOfCaption", ArrayOfCaption.class); envelopes.addMapping(CaptionInfo.NAMESPACE, "CaptionInfo", CaptionInfo.class); //envelopes.addMapping(...);必须加 envelopes.bodyOut = requests; envelopes.dotNet = true; envelopes.setOutputSoapObject(requests); HttpTransportSE hts = new HttpTransportSE(urlString); try { hts.call(soapAction, envelopes); if(envelopes.getResponse() != null) { //解析的时候没找到好的解析方法,只能一步一步按照字段解析 //可以单步调试,看返回值是什么 SoapObject returnObjects = (SoapObject) envelopes.bodyIn; //SoapObject CaptionList = (SoapObject)returnObjects.getProperty(0); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); }
CaptionInfo的定义:
<pre name="code" class="java">
class Caption implements KvmSerializable{ public String BackColor; public String CaptionName; public String Content; public String Font; public String FontColor; public String FontOpacity; public String OutlineColor; public String getCaptionName() { return CaptionName; } public void setCaptionName(String captionName) { CaptionName = captionName; } public String getContent() { return Content; } public void setContent(String content) { Content = content; } public String getFont() { return Font; } public void setFont(String font) { Font = font; } public String getFontColor() { return FontColor; } public void setFontColor(String fontColor) { FontColor = fontColor; } public String getBackColor() { return BackColor; } public void setBackColor(String backColor) { BackColor = backColor; } public String getFontOpacity() { return FontOpacity; } public void setFontOpacity(String fontOpacity) { FontOpacity = fontOpacity; } public String getOutlineColor() { return OutlineColor; } public void setOutlineColor(String outlineColor) { OutlineColor = outlineColor; } @Override public Object getProperty(int arg0) { // TODO Auto-generated method stub switch (arg0) { case 0: return BackColor; case 1: return CaptionName; case 2: return Content; case 3: return Font; case 4: return FontColor; case 5: return FontOpacity; case 6: return OutlineColor; default: return null; } } @Override public int getPropertyCount() { // TODO Auto-generated method stub return 7;//属性的个数 } @Override public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) { // TODO Auto-generated method stub arg2.namespace = "http://schemas.datacontract.org/2004/07/RecordUIObject"; switch (arg0) { case 0: arg2.type = PropertyInfo.STRING_CLASS; arg2.name = "BackColor"; break; case 1: arg2.type = PropertyInfo.STRING_CLASS; arg2.name = "CaptionName"; break; case 2: arg2.type = PropertyInfo.STRING_CLASS; arg2.name = "Content"; break; case 3: arg2.type = PropertyInfo.STRING_CLASS; arg2.name = "Font"; break; case 4: arg2.type = PropertyInfo.STRING_CLASS; arg2.name = "FontColor"; break; case 5: arg2.type = PropertyInfo.STRING_CLASS; arg2.name = "FontOpacity"; break; case 6: arg2.type = PropertyInfo.STRING_CLASS; arg2.name = "OutlineColor"; break; default: break; } } @Override public void setProperty(int arg0, Object arg1) { // TODO Auto-generated method stub switch (arg0) { case 0: BackColor = arg1.toString(); break; case 1: CaptionName = arg1.toString(); break; case 2: Content = arg1.toString(); break; case 3: Font = arg1.toString(); break; case 4: FontColor = arg1.toString(); break; case 5: FontOpacity = arg1.toString(); break; case 6: OutlineColor = arg1.toString(); break; default: break; } } } class ArrayOfCaption extends Vector<Caption> implements KvmSerializable { @Override public Object getProperty(int arg0) { // TODO Auto-generated method stub return this.get(arg0); } @Override public int getPropertyCount() { // TODO Auto-generated method stub return this.size(); } @Override public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) { // TODO Auto-generated method stub arg2.namespace = "http://schemas.datacontract.org/2004/07/RecordUIObject"; arg2.name = "Caption"; arg2.type = new Caption().getClass(); } @Override public void setProperty(int arg0, Object arg1) { // TODO Auto-generated method stub this.add((Caption)arg1); } } public class CaptionInfo implements BaseObject{ public ArrayOfCaption CaptionList = new ArrayOfCaption(); public ArrayOfCaption getArrayOfCaption() { return CaptionList; } public void setArrayOfCaption(ArrayOfCaption arrayOfCaption) { this.CaptionList = arrayOfCaption; } @Override public Object getProperty(int arg0) { // TODO Auto-generated method stub return CaptionList; } @Override public int getPropertyCount() { // TODO Auto-generated method stub return 1; } @Override public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) { // TODO Auto-generated method stub arg2.namespace = "http://schemas.datacontract.org/2004/07/RecordUIObject"; arg2.type = PropertyInfo.VECTOR_CLASS; arg2.name = "CaptionList"; } @Override public void setProperty(int arg0, Object arg1) { // TODO Auto-generated method stub CaptionList = (ArrayOfCaption)arg1; } }
相关文章推荐
- android通过ksoap访问webservice方法传递一个复杂对象参数
- Jquery ajax传递复杂参数给WebService的实现代码
- Android使用Intent传递复杂参数及复杂参数列表
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- Jquery ajax传递复杂参数给WebService
- Android开发:使用序列化接口Parcelable、Serializable实现Activity间传递复杂数据类型参数
- 解决 android客户端和jsp传递中文参数乱码的问题
- Android的intent之间复杂参数的传递
- 访问WebService传递复杂参数
- webservice如何传递复杂参数和自定义参数
- Android的intent之间复杂参数的传递
- Android的intent之间复杂参数的传递
- android客户端采用Post和Get方式向web服务器传递参数
- Android的intent之间复杂参数的传递
- Android的intent之间复杂参数的传递
- Jquery ajax传递复杂参数给WebService
- Android使用Intent传递复杂参数及复杂参数列表
- Android的intent之间复杂参数的传递
- Android的intent之间复杂参数的传递
- Android的intent之间复杂参数的传递