IT狗

Ksoap-android 编程案例

Ksoap-android 编程案例

挪动端编程在事情中,也会碰到android与webservice之间的通讯, 为了更好的兼容安卓端通讯,有大神写了一个框架Ksoap-android, 使得安卓通webservice 通讯变得简洁。
            可是实践编程中也并不是那末简洁,会碰到种种奇葩的成绩。可是网上查找信息时会发明,根本都是入门级的代码,不能够办理实践 成绩。比方android端哀求一个庞大的一个构造体,或构造体中另有构造体,或都 数组之类的成绩。
我经由了一个大早晨研讨把成绩办理了, 记实到空间,以备本身下次进修,假如何可以匡助别的人办理成绩那就更好啦, 常识就是用来共享的。
用案例说明更间接 ,不想那末多笔墨,间接上代码:

案例就搞最庞大的, webservice一个要领吸收两个构造体: 第一个对比 简洁的构造体Person, 第二个是包含构造体数组的构造 体City(包含Person构造体)

实体类肯定要重写 setter和getter 要领,不会webserice会读取不到值。

实体类: Person.java

public class Person implements KvmSerializable {    private String Name;    public void setName(String name) {        Name = name;    }    public String getName() {        return Name;    }    @Override    public Object getProperty(int i) {        Object object = null;        switch (i) {            case 0:                object = this.Name;                break;        }        return object;    }    @Override    public int getPropertyCount() {        return 1;    }    @Override    public void setProperty(int i, Object o) {        switch (i) {            case 0:                Name = o.toString();                break;        }    }    @Override    public void getPropertyInfo(int i, Hashtable hashtable, PropertyInfo propertyInfo) {        switch (i) {            case 0:                propertyInfo.name = "Name";                propertyInfo.type = PropertyInfo.STRING_CLASS;                break;        }    }}

要完成接口KvmSerializable , 此刻是一个属性, 看下划定规矩就明白 ,假如是两个属性那就 加上每一个要领 添加到 case 1;  而且grePropertyCount  return 2; 以此类推。就是一个完备的实体类了。


City.java

public class City implements KvmSerializable {    private String Name;    private PersonArraySerializer PersonList;    public void setName(String name) {        Name = name;    }    public String getName() {        return Name;    }    public PersonArraySerializer getPersonList() {        return PersonList;    }    public void setPersonList(PersonArraySerializer personList) {        PersonList = personList;    }    @Override    public Object getProperty(int i) {        Object object = null;        switch (i) {            case 0:                object = this.Name;                break;            case 1:                object = this.PersonList;                break;        }        return object;    }    @Override    public int getPropertyCount() {        return 2;    }    @Override    public void setProperty(int i, Object o) {        switch (i) {            case 0:                Name = o.toString();                break;            case 1:                PersonList = (PersonArraySerializer) o;                break;        }    }    @Override    public void getPropertyInfo(int i, Hashtable hashtable, PropertyInfo propertyInfo) {        switch (i) {            case 0:                propertyInfo.name = "Name";                propertyInfo.type = PropertyInfo.STRING_CLASS;                break;            case 1:                propertyInfo.name = "PersonList";                propertyInfo.type = PropertyInfo.VECTOR_CLASS;                break;        }    }}

以后,Ksoap也是不支撑数组的,要从头写一个数组的类  这里我从头写了一个PersonArraySerializer 的数组类


PersonArraySerializer.java


public class PersonArraySerializer extends Vector<Person> implements KvmSerializable {    @Override    public Object getProperty(int index) {        return this.get(index);    }    @Override    public int getPropertyCount() {        return this.size();    }    @Override    public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {        info.name = "Person";//        info.name = "operation";        info.type = Person.class;    }    @Override    public void setProperty(int index, Object arg1) {        this.add((Person) arg1);    }}

到这里, 实体类都 曾经预备终了了。

上面是哀求步调:



public void requestSoap() {          //创立哀求,参数分别为Web办事拜访地点、挪用的要领,此处挪用的是拔出日记要领,须要传入一个日记对象        SoapObject request = new SoapObject("http://tempuri.org/","Do_Hanger_Record");//此处的url即为wsdl中的targetNamespace,和挪用的要领        Person person = new Person(); //创立一个person对象        person.setName("aaa");        City c = new City();     //创立一个包含person数组的对象        c.setName("tz");        PersonArraySerializer persons = new PersonArraySerializer();        persons.add(person);        persons.add(person);        c.setPersonList(persons);        PropertyInfo propertyInfo = new PropertyInfo();   //设置构造体person到request中        propertyInfo.setName("person");						//webservice的吸收的参数        propertyInfo.setValue(person);						//发送的实体类        propertyInfo.setType(Person.class);					//设置构造体的范例        request.addProperty(propertyInfo);					//设置到哀求中        PropertyInfo propertyInfo1 = new PropertyInfo();  //设置构造体city到request中        propertyInfo1.setName("c");        propertyInfo1.setValue(c);        propertyInfo1.setType(City.class);        request.addProperty(propertyInfo1);        HttpTransportSE httpTransportSE = new HttpTransportSE("http://192.168.221.185:8913/WebService1.asmx");  //设置webserice的URL        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);        envelope.dotNet = true;        envelope.setOutputSoapObject(request);               envelope.addMapping("http://tempuri.org/", "Person", Person.class);    	//添加person的映照让webservices可以实别(只需自界说范例都要写上映照)        envelope.addMapping("http://tempuri.org/", "City", City.class);        envelope.addMapping("http://tempuri.org/", "PersonArraySerializer", PersonArraySerializer.class);           try {            //提交            httpTransportSE.call(null, envelope);            if (envelope.getResponse() != null) {                Log.I("Ksoap",envelope.getResponse()==null?"null":envelope.getResponse().toString());                messageCallback.showText(envelope.getResponse().toString());            } else {                Log.I("Ksoap","null");            }            messageCallback.hideProgressDlg();        } catch (IOException e) {            e.printStackTrace();        } catch (XmlPullParserException e) {            e.printStackTrace();        } catch (Exception e) {            e.printStackTrace();        }    }

解释很具体,应当差不多啦。
好了,末了不要忘了导入Ksoap-andriod 的jar包

此文由 IT狗 编辑,本网站所发布展示的作品/文章版权归原作者所有,任何商业用途均须联系作者!

相关推荐

评论 暂无评论