写代码前的准备:
导架包:将soap架包复制粘贴到libs文件下-------->右键工程名------->open Module settings------>dependencies------->点“+”---->file dependency----->找到libs下架包---->ok
开始写代码:
一:建一个类装参数名,对应项。(后面要用到)
public class CoresInWebServiece {
private String name;
private String result;
//给get和set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
//构造器
public CoresInWebServiece(String name, String result) {
this.name = name;
this.result = result;
}
}
二、建一个类开始封装
public class FengWebServiece { //实现封装的方法 含参数(命名空间:NAME_SPACE,方法名:METHOD_NAME,网络连接:url,List集合泛型为前面创建的类的对象主要为了方法提中设置参数,一个用来传数据的自定义接口,后面有定义)。 public static void getJson (final String NAME_SPACE, final String METHOD_NAME, final String url, final List<CoresInWebServiece> list, final CallBack callBack) { new Thread(new Runnable() { @Override public void run() { final String str; //实例化对象 SoapObject soapObject=new SoapObject(NAME_SPACE,METHOD_NAME); //通过传来的list判断是否有参数,有则增加参数,webservice参数如果没有可以省略, if (list!=null){ for (int i=0;i<list.size();i++){ soapObject.addProperty(list.get(i).getName(), list.get(i).getResult()); } } //创建一个传输对象 HttpTransportSE httpTransportSE=new HttpTransportSE(url); httpTransportSE.debug=true; //生成调用的WebService方法的Soap请求信息 获得序列化的Envelope SoapSerializationEnvelope soapSerializationEnvelope=new SoapSerializationEnvelope(SoapEnvelope.VER10); soapSerializationEnvelope.bodyOut=soapObject; soapSerializationEnvelope.dotNet=true; try {
//请求数据 httpTransportSE.call(null,soapSerializationEnvelope);
//获得数据 SoapObject data = (SoapObject) soapSerializationEnvelope.bodyIn;
//将获得的数据转化为标准的Json数据。 str=data.getProperty(0).toString();
//将Json数据放到接口的方法里 callBack.setJsonString(str); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } } }).start(); } //自定义的接口,用来创数据 public interface CallBack{ void setJsonString(String str); } }
三,测试示例
这里建一个Activity,布局里放一个按钮,按钮按下获得数据
public class FengWebServiceActivity extends Activity { private Button btn;
//定义好参数 private static final String NAME_SPACE="http://info.service.zhidisoft.com"; private static final String METHOD_NAME="columnChildList"; private static final String url="http://114.215.193.46:8080/services/bmInfoService"; private List<CoresInWebServiece> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_feng_web_service); btn= (Button) findViewById(R.id.btn); list=new ArrayList<>(); CoresInWebServiece c1=new CoresInWebServiece("communityCode", "00001"); CoresInWebServiece c2=new CoresInWebServiece("columnCode", "xx"); list.add(c1); list.add(c2);
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {
//通过调用前面类的方法获得Json数据 FengWebServiece.getJson(NAME_SPACE, METHOD_NAME, url, list,new FengWebServiece.CallBack() { @Override public void setJsonString(String str) {
//这里的参数str就是我们要的Json数据,这里我通过日志打印出来 Log.e("Cat",str); } }); } }); } }
结果:Cat: {"result":true,"value":[{"id":"fdaeb2454b85f295014bd898d56100de","publishShow":"..............................