android 使用Ksoap2工具类实现WebService网络编程
1.下载Ksoap2,将jar包拷贝到libs目录下。然后右键点击拷贝进来的jar,在弹出菜单中点击Add As Library.
2.在AndroidManifest.xml中添加访问网络的权限
<uses-permission android:name="android.permission.INTERNET"/>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.webservicedemo">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
3.简单实现的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.company.webservicedemo.MainActivity"
tools:showIn="@layout/activity_main">
<EditText
android:id="@+id/orgCode_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入要查询的组织编码" />
<Button
android:id="@+id/get_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取组织信息" />
<TextView
android:id="@+id/show_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
4.自己实现的一个简单的接口。

5.点击获取按钮,调用接口,将返回的结果显示在TextView空间中。
package com.company.webservicedemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity { Button button;
TextView textView;
EditText orgCodeTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.get_btn);
textView = (TextView) findViewById(R.id.show_txt);
orgCodeTxt = (EditText) findViewById(R.id.orgCode_txt);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
WebServiceUtils.getOrgInfo(orgCodeTxt.getText().toString(), new WebServiceUtils.CallBack() {
@Override
public void result(String result) {
textView.setText(result);
}
});
}
});
}
}
6.调用WebService接口的具体实现,UI主线程中不能直接进行网络通信,需要在子线程中完成。返回的信息是在子线程中,需要利用Handler来实现子线程与主线程信息的传递。
package com.company.webservicedemo;
import android.os.Handler;
import android.os.Message;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE; public class WebServiceUtils {
public interface CallBack {
void result(String result);
}
public static void getOrgInfo(final String orgCode, final CallBack callBack) {
// 用于子线程与主线程通信的Handler
final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 将返回值回调到callBack的参数中
callBack.result((String) msg.obj);
}
};
new Thread(new Runnable() {
@Override
public void run() {
// 命名空间
String nameSpace = "http://tempuri.org/";
// 调用的方法名称
String methodName = "GetOrgInfo";
// EndPoint
String endPoint = "http://192.168.1.12:8037/IWMSService.asmx?wsdl";
// SOAP Action
final String soapAction = "http://tempuri.org/GetOrgInfo";//nameSpace+methodName
// 建立webservice连接对象
final HttpTransportSE transport = new HttpTransportSE(endPoint);
//transport.debug = true;// 是否是调试模式
// 设置连接参数
SoapObject soapObject = new SoapObject(nameSpace, methodName);
soapObject.addProperty("orgCode", orgCode);
// 设置返回参数
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);// soap协议版本必须用SoapEnvelope.VER11(Soap V1.1)
envelope.dotNet = true;// 注意:这个属性是对dotnetwebservice协议的支持,如果dotnet的webservice需要设置成true
envelope.bodyOut = soapObject;//千万注意!!
envelope.setOutputSoapObject(soapObject);// 设置请求参数
try {
transport.call(soapAction, envelope);// 调用WebService
} catch (Exception e) {
mHandler.sendMessage(mHandler.obtainMessage(-1, e.getMessage()));
}
if (envelope.bodyIn instanceof SoapFault) {
SoapFault error = (SoapFault) envelope.bodyIn;
// 将异常的消息利用Handler发送到主线程
mHandler.sendMessage(mHandler.obtainMessage(0, error.toString()));
} else {
SoapObject object = (SoapObject) envelope.bodyIn;// 获取返回的数据
// 将结果利用Handler发送到主线程
mHandler.sendMessage(mHandler.obtainMessage(1, object.getProperty(0).toString()));
}
}
}).start();
}
}
android 使用Ksoap2工具类实现WebService网络编程的更多相关文章
- (转载)实例详解Android快速开发工具类总结
实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...
- Android 软件管理工具类Utils
Android 软件管理工具类Utils /** * Created by uilubo on 2015/9/30. * 工具类 */ public class Utils { public stat ...
- 一个使用命令行编译Android项目的工具类
一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...
- Android开发常用工具类
来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...
- Android常用的工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils. Prefe ...
- android 开发 常用工具类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅 ...
- Android常用的工具类(转)
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...
- 2013最新Android常用的工具类整理
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils. Pref ...
- 最全Android开发常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括 HttpUtils.DownloadManagerPro.Safe.ijiami.ShellUtils.Pack ...
随机推荐
- Python之Threading模块
Thread 先引入一个例子: >>> from threading import Thread,currentThread,activeCount >>> > ...
- web工程自动部署(tomcat服务器)
工作中经常需要把web项目打成war包之后部署到tomcat服务器上,每次更新时步骤比较类似,这里提供公共步骤,编写名为auto_deploy.sh的shell脚本,只需要传递两个参数即可自动完成部署 ...
- JAVA 中LinkedHashMap要点记录
JAVA 中LinkedHashMap要点记录 构造函数中可能出现的几个参数说明如下: 1.initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16 2.loadFactor ...
- hadoop2.5的伪分布式安装配置
一.windows环境下安装 根据博主写的一次性安装成功了: http://blog.csdn.net/antgan/article/details/52067441 二.linux环境下(cento ...
- 认识 Less
CSS(层叠样式表)是一项出色的技术,它使得网页的表现与内容完全分离,使网站维护工作变得更容易,不会因为内容的改变而影响表现,也不会因为表现的改变而影响内容. 作为一门标记性语言,CSS 的先天性优点 ...
- null与undefined的比较
null在JavaScript中是关键字,它属于一个特殊的值,即空值. 而undefined它不是关键字,它表示未定义,属于预定义的全局变量. null == undefined 返回的是 true ...
- Android开发之漫漫长途 番外篇——自定义View的各种姿势2
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- JDK1.7中HashMap底层实现原理
一.数据结构 HashMap中的数据结构是数组+单链表的组合,以键值对(key-value)的形式存储元素的,通过put()和get()方法储存和获取对象. (方块表示Entry对象,横排表示数组ta ...
- 初识分布式计算:从MapReduce到Yarn&Fuxi
这些年,云计算.大数据的发展如火如荼,从早期的以MapReduce为代表的基于文件系统的离线数据计算,到以Spark为代表的内存计算,以及以Storm为代表的实时计算,还有图计算等等.只要数据规模 ...
- 项目实战8—tomcat企业级Web应用服务器配置与会话保持
tomcat企业级Web应用服务器配置与实战 环境背景:公司业务经过长期发展,有了很大突破,已经实现盈利,现公司要求加强技术架构应用功能和安全性以及开始向企业应用.移动APP等领域延伸,此时原来开发w ...