如何在Android Studio项目中添加ASMX类以接入SOAP Web服务
在Android Studio中实现SOAP Web服务连接(替代Xamarin的服务引用功能)
嘿,我完全懂你那种“怎么这么麻烦”的感受!Xamarin右键加服务引用的一键生成确实太丝滑了,但Android Studio这边确实没有直接对应的内置功能。不过别慌,咱们有两种靠谱的方法来搞定SOAP服务调用,实现和SQL Server的交互:
方法一:使用kSOAP2库手动编写SOAP请求
这是Android开发中处理SOAP服务最常用的方案,灵活性很高。
步骤1:添加依赖
打开你的模块级build.gradle文件(通常是app/build.gradle),在dependencies块里添加kSOAP2的依赖:
implementation 'com.google.code.ksoap2-android:ksoap2-android:3.6.4'
同步Gradle让依赖生效。
步骤2:编写SOAP调用代码
你需要手动构造SOAP请求、发送请求并解析响应。举个简单的示例:
import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; // 定义SOAP相关常量 private static final String NAMESPACE = "http://your-service-namespace.com/"; private static final String METHOD_NAME = "YourServiceMethod"; private static final String SOAP_ACTION = NAMESPACE + METHOD_NAME; private static final String URL = "http://your-service-url/YourService.asmx"; // 在子线程中执行网络请求(Android不允许主线程做网络操作) new Thread(() -> { try { // 创建SOAP请求对象 SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); // 添加请求参数(如果你的服务需要的话) request.addProperty("ParamName", "ParamValue"); // 创建SOAP信封 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(request); envelope.dotNet = true; // 如果是.NET的SOAP服务(比如SQL Server的ASMX服务),一定要设为true // 发送请求 HttpTransportSE transport = new HttpTransportSE(URL); transport.call(SOAP_ACTION, envelope); // 解析响应 SoapObject response = (SoapObject) envelope.getResponse(); String result = response.getProperty("ResultProperty").toString(); // 回到主线程更新UI(如果需要的话) runOnUiThread(() -> { // 处理结果 }); } catch (Exception e) { e.printStackTrace(); } }).start();
方法二:用WSDL生成工具自动生成客户端代码
如果你的SOAP服务有WSDL文件,你可以用工具把WSDL转换成Java客户端类,类似Xamarin的服务引用效果。
步骤1:获取WSDL文件
访问你的SOAP服务URL,比如http://your-service-url/YourService.asmx?WSDL,把页面内容保存成.wsdl文件。
步骤2:用wsdl2java生成代码
可以用Apache Axis2的wsdl2java工具,或者JAX-WS的wsimport工具。这里以Axis2为例:
- 下载Axis2的二进制包,解压后找到
bin/wsdl2java.bat(Windows)或bin/wsdl2java.sh(Linux/Mac)。 - 打开命令行,运行以下命令:
wsdl2java -uri path/to/your/service.wsdl -p com.your.app.soapclient -d adb -s
-uri:指定你的WSDL文件路径-p:指定生成类的包名-d adb:生成Android兼容的代码-s:生成同步调用的代码(也可以用异步)
步骤3:导入生成的代码到项目
把生成的所有Java文件复制到你的Android项目的src/main/java/com/your/app/soapclient目录下,然后就可以像调用普通Java类一样使用SOAP服务了:
// 创建服务客户端实例 YourServiceStub stub = new YourServiceStub(); // 设置服务地址(如果需要的话) stub._getServiceClient().getOptions().setTo(new EndpointReference(URL)); // 构造请求参数 YourServiceStub.YourMethodRequest request = new YourServiceStub.YourMethodRequest(); request.setParamName("ParamValue"); // 调用服务 YourServiceStub.YourMethodResponse response = stub.yourMethod(request); String result = response.getResult();
必加的配置
- 网络权限:在
AndroidManifest.xml里添加互联网权限:
<uses-permission android:name="android.permission.INTERNET" />
- 明文HTTP处理(Android 9+):如果你的SOAP服务用的是HTTP而不是HTTPS,需要在
res/xml下创建network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
然后在AndroidManifest.xml的<application>标签里引用:
android:networkSecurityConfig="@xml/network_security_config"
内容的提问来源于stack exchange,提问作者Mostafa Azadi
相关产品推荐
相关产品推荐

