老早之前接触过安卓通过webservice和服务端交互,但是没有记录下来,这次又遇到了,所以记录一下。
使用方法其实很简单:
第一步
project的build.gradle里面添加仓库
maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases/' }
第二步
app的build.gradle里面引入依赖
// webservice
implementation 'com.google.code.ksoap2-android:ksoap2-android:3.1.1'
第三步
thread(start = true){
// 命名空间
val targetNameSpace = "DarASTW_Wes"
val methodName = "GetAllStops"
// 调用的方法名称
val action = "$targetNameSpace/$methodName"
//http://114.115.173.xxx:xxx/DarASTW_Wes.asmx
val WSDL: String = GlobalConstants.RES_HOST
// 指定WebService的命名空间和调用的方法名
val rpc = SoapObject(targetNameSpace, methodName)
// 设置需调用WebService接口需要传入的参数
rpc.addProperty("ComputerID", "$ComputerID|")
rpc.addProperty("FromStationID", "$FromStationID|")
// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
val envelope = SoapSerializationEnvelope(SoapEnvelope.VER11)
envelope.bodyOut = rpc
// 设置是否调用的是dotNet开发的WebService
envelope.dotNet = true //必须为true 否则会报无此出发站 有毒!!
envelope.setOutputSoapObject(rpc)
val transport = HttpTransportSE(WSDL)
try {
// 调用WebService
transport.call(action, envelope)
// 得到远程方法返回的SOAP对象
val resultObj: Any = envelope.response
// 得到服务器传回的数据
report(DestinationViewModel::class.java.simpleName,"getAllCity","获取所有到达站","$WSDL/$methodName",resultObj.toString())
} catch (e: Exception) {
report(DestinationViewModel::class.java.simpleName,"getAllCity ERROR","获取所有到达站","$WSDL/$methodName",e.message)
}
}