有很多同学在安卓开发中后端服务接口是用C#WebService编写的,那么用我们以前的Http来请求就不行了,在开发中找到了网上使用ksoap2来访问C#WebService,至于原理我也不是很清楚
既然是开发,我们能够使用就行,下面是我通过借鉴网上别的大神的例子,进行改写封装成了工具类,复制后可直接使用,下面我给大家说明一下,以便大家使用。
public class SoapUtil {
//单例模式创建对象
private static SoapUtil instance;
public static SoapUtil getInstance(){
if(null == instance){
instance = new SoapUtil();
}
return instance;
}
/**
*
* @author
* @time 2016/9/5 16:07
* @param handler 主线程通信的handler maps 需要的参数Man集合
* @return
*/
public void getSoapResultByparams(final Handler handler,String methodName,Map<String,String> maps){
final String SERVICE_NS = "http://tempuri.org/";//命名空间
final String SOAP_ACTION = "http://tempuri.org/"+methodName;//用来定义消息请求的地址,也就是消息发送到哪个操作
//创建HttpTransportSE传输对象,该对象用于调用Web Service操作
final HttpTransportSE ht = new HttpTransportSE(znApp.SERVER_URL);
ht.debug = true;
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
//便利并对相应的参数赋值
if (maps!=null){
for(String key:maps.keySet()){
soapObject.addProperty(key,maps.get(key));
}
}
envelope.dotNet = true;
envelope.bodyOut = soapObject;
new Thread(){
@Override
public void run() {
try {
ht.call(SOAP_ACTION, envelope);
if(envelope.getResponse() != null){
SoapObject so = (SoapObject) envelope.bodyIn;
Message msg = new Message();
msg.obj=so.getProperty(0).toString();
Log.i("message",msg.obj.toString());
handler.sendMessage(msg);
}
else{
Message msg=new Message();
msg.obj=null;
handler.sendMessage(msg);
}
} catch (IOException e) {
Message message=new Message();
message.arg1=1;
handler.sendMessage(message);
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
}.start();
}
}