Android 中利用 ksoap2 调用 WebService的示例代码
去年刚刚工作的时候,第一个项目是要访问 WebService。由于没有接触过,查了很多资料,在别人代码的基础上稍微修改了一下,总算满足了自己的需求。最近整理电脑的时候,发现了这个 WebService 的访问类,怕哪一天需要的时候找不到了,干脆写在博客上吧,也给需要的人提供一个参考。 1.下载 ksoap2 的 jar 文件 下载地址:ksoap2-android-assembly-3.6.1-jar-with-dependencies.jar 下载完成后依赖到自己的项目中即可。 2.封装网络访问工具类 直接贴代码了,注释写的很详细,根据自己的需要加以修改。 /** * 访问 WebSer 在Android开发中,有时我们需要与Web服务进行交互,特别是那些基于SOAP协议的Web服务。ksoap2是一个轻量级库,允许Android应用通过HTTP/HTTPS协议调用远程Web服务。以下是一个详细的步骤和示例代码,说明如何在Android中利用ksoap2调用WebService。 1. **添加ksoap2依赖** 你需要下载ksoap2的jar文件,如`ksoap2-android-assembly-3.6.1-jar-with-dependencies.jar`。将这个jar文件添加到你的Android项目的libs目录下,然后在`build.gradle`文件中将其作为库引用。例如: ```groovy dependencies { implementation files('libs/ksoap2-android-assembly-3.6.1-jar-with-dependencies.jar') } ``` 记得执行`./gradlew sync`或点击Android Studio中的"Sync Now"按钮以更新项目构建配置。 2. **创建网络访问工具类** 在Android应用中,通常会封装一个工具类来处理网络请求。以下是一个简单的`WebServiceUtil`类的示例,包含了调用WebService的基本逻辑: ```java import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.PropertyInfo; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; public class WebServiceUtil { // 定义常量,如命名空间、服务器地址、身份验证信息等 private static final String NAMESPACE = "your namespace"; private static final String ENDPOINT = "your address"; // ...其他常量... // 是否为.NET开发的WebService public static boolean isDotNet = true; // 线程池大小 private static int threadSize = 5; // 创建线程池 private static ExecutorService threadPool = Executors.newFixedThreadPool(threadSize); // 调用WebService接口的方法 public static void call(String methodName, Map<String, Object> params, ResponseCallBack responseCallBack) { // 创建HttpTransportSE对象,设置WebService服务器地址 HttpTransportSE transport = new HttpTransportSE(ENDPOINT); transport.debug = true; // 创建SoapSerializationEnvelope对象,用于封装请求数据 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = isDotNet; // 将方法名设置为 SoapAction envelope.setSoapAction(NAMESPACE + "/" + methodName); // 创建SoapObject,表示调用的WebService方法 SoapObject request = new SoapObject(NAMESPACE, methodName); // 如果有参数,将参数添加到SoapObject中 if (params != null) { for (Map.Entry<String, Object> entry : params.entrySet()) { PropertyInfo propInfo = new PropertyInfo(); propInfo.setName(entry.getKey()); propInfo.setValue(entry.getValue()); propInfo.setType(entry.getValue().getClass()); request.addProperty(propInfo); } } // 将请求对象放入SoapSerializationEnvelope中 envelope.bodyOut = request; // 发送请求并处理响应 threadPool.execute(() -> { try { // 调用Web服务 transport.call(null, envelope); // 检查响应 SoapPrimitive result = (SoapPrimitive) envelope.getResponse(); int responseFlag = result == null ? ERROR_FLAG : SUCCESS_FLAG; // 调用回调方法传递响应结果 responseCallBack.onResponse(responseFlag, result != null ? result.toString() : ""); } catch (Exception e) { e.printStackTrace(); responseCallBack.onError(e.getMessage()); } }); } // 定义回调接口 public interface ResponseCallBack { void onResponse(int flag, String result); void onError(String errorMessage); } } ``` 3. **使用工具类调用WebService** 当你需要调用WebService时,可以像下面这样使用`WebServiceUtil`类: ```java WebServiceUtil.call("YourWebServiceMethod", params, new WebServiceUtil.ResponseCallBack() { @Override public void onResponse(int flag, String result) { if (flag == WebServiceUtil.SUCCESS_FLAG) { // 处理成功响应 Log.d("WebService", "Success: " + result); } else { // 处理失败响应 Log.e("WebService", "Error: " + result); } } @Override public void onError(String errorMessage) { // 处理错误 Log.e("WebService", "Error: " + errorMessage); } }); ``` 在这里,`YourWebServiceMethod`是你要调用的WebService方法名,`params`是一个包含参数的Map,`ResponseCallBack`用于接收服务端的响应。 注意:在实际应用中,你可能需要处理网络权限,以及在主线程之外执行网络操作,以避免阻塞UI。此外,为了确保安全性,应考虑使用HTTPS和加密的身份验证机制。上述代码仅作为基础示例,实际应用中需要根据具体需求进行调整和优化。
- 粉丝: 9
- 资源: 893
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 汇编语言安装文件:nasm-2.16.03
- Java 插件框架 (PF4J).zip
- image-svnadmin-2.5.3.tgz 正在使用ing,方便简单使用,运维好工具
- 地平线ros2文件.zip
- Java 多线程课程的代码及少量注释.zip
- 数据库课程设计-基于的个性化购物平台的建表语句.sql
- 数据库课程设计-基于的图书智能一体化管理系统的建表语句.sql
- Java 代码覆盖率库.zip
- Java 代码和算法的存储库 也为该存储库加注星标 .zip
- 免安装Windows10/Windows11系统截图工具,无需安装第三方截图工具 双击直接使用截图即可 是一款免费可靠的截图小工具哦~
评论0