首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Android利用ksoap传送复杂对象参数

2012-12-25 
Android利用ksoap传递复杂对象参数Android 传递复杂对象到wcf方法:wcf 服务端相关配置:1 创建一个User [Da

Android利用ksoap传递复杂对象参数

Android 传递复杂对象到wcf方法:wcf 服务端相关配置:1 创建一个User [DataContract]    public class User    {       [DataMember]        public int Age        {            get;            set;        }
       [DataMember]        public String Name        {            get;            set;        }    }2 创建一个方法    #region IService1 成员

        public string GetUserInfo(User user)        {            if (null != user)                return user.Age + " " + user.Name;            return "";        }
        #endregion3 配置先关参数,需要注意的是  bingding采用<services>      <service name="test.Service1">        <endpoint address="" binding="basicHttpBinding" bindingConfiguration=""          contract="test.IService1">          <identity>            <dns value="localhost" />          </identity>        </endpoint>        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />        <host>          <baseAddresses>            <add baseAddress="http://localhost:8732/Design_Time_Addresses/test/Service1/" />          </baseAddresses>        </host>      </service>    </services>
android端配置:
1 创建一个相同的对象在Android端public class User{public static Class UserClass = User.class;public int getAge() {return Age;}public void setAge(int age) {Age = age;}public String getName() {return Name;}public void setName(String name) {Name = name;} public static User fromString(String s)    {     User result = new User();    String[] tokens = s.split("=");    String age = tokens[1].split(";")[0];    String name = tokens[2].split(";")[0];        result.Age = Integer.parseInt(age);    result.Name = name;     return result;    }private int Age;private String Name;
}
2 创建一个User对象的Marshal对象public class MarshalUser implements Marshal {
private static String dataContract = "http://schemas.datacontract.org/2004/07/test";//要注意这儿的定义,具体查看wcf端的xml是如何定义的@Overridepublic Object readInstance(XmlPullParser parser, String arg1, String arg2,PropertyInfo arg3) throws IOException, XmlPullParserException {return User.fromString(parser.nextText());}
@Overridepublic void register(SoapSerializationEnvelope cm) {cm.addMapping(dataContract, "user", User.class, this);}
@Overridepublic void writeInstance(XmlSerializer writer, Object obj)throws IOException { User user = (User)obj;         writer.startTag(dataContract, "Age");         writer.text(Integer.toString(user.getAge()));         writer.endTag(dataContract, "Age");         writer.startTag(dataContract, "Name");         writer.text(user.getName());         writer.endTag(dataContract, "Name"); }
}
3 调用wcf,并定义complex type的内容如下:       SoapObject request = new SoapObject(serviceNameSpace, methodName);              User user = new User();        user.setAge(10);        user.setName("corning");                PropertyInfo pi = new PropertyInfo();        pi.setName("user");        pi.setValue(user);        pi.setType(user.getClass());        request.addProperty(pi);       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);                envelope.dotNet = true;         envelope.bodyOut = request;         envelope.implicitTypes = true;                envelope.addMapping(serviceNameSpace, User.UserClass.getSimpleName(), User.UserClass);                MarshalUser userMarshal = new MarshalUser();        userMarshal.register(envelope);        // Android传输对象         HttpTransportSE transport = new HttpTransportSE(serviceURL);         transport.debug = true; 时间比较忙,可能思路比较乱,如有问题请电邮:799733037@qq.com

热点排行