下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】怎么在Android中利用ksoap2对WebService进行调用
本篇文章给大家分享的是有关怎么在Android中利用ksoap2对WebService进行调用,在下觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着在下一起来看看吧。1.下载ksoap2的jar文件下载地址:ksoap2-android-assembly-3.6.1-jar-with-dependencies.jar下载完成后依赖到自己的项目中即可。2.封装网络访问工具类直接贴代码了,注释写的很详细,根据自己的需要加以修改。/**
*
访问
WebService
的工具类
*/
public
class
WebServiceUtil
{
//
命名空间
private
static
final
String
NAMESPACE
=
"your
namespace";
//
WebService
服务器地址
private
static
final
String
ENDPOINT
=
"your
address";
//
一般自己公司开发都是需要身份验证的
//
身份验证方法名
private
static
final
String
ID_HEADERNAME
=
"verify
method";
//
身份验证
key
private
static
final
String
ID_NAME_PARAM
=
"verify
key1";
//
身份验证
value
private
static
final
String
ID_NAME_VALUE
=
"verify
value1";
//
身份验证
key
private
static
final
String
ID_PASSWORD_PARAM
=
"verify
key2";
//
身份验证
value
private
static
final
String
ID_PASSWORD_VALUE
=
"verify
value2";
//
访问的服务器是否由
dotNet
开发
public
static
boolean
isDotNet
=
true;
//
线程池的大小
private
static
int
threadSize
=
5;
//
创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程
private
static
ExecutorService
threadPool
=
Executors.newFixedThreadPool(threadSize);
//
连接响应标示
public
static
final
int
SUCCESS_FLAG
=
0;
public
static
final
int
ERROR_FLAG
=
1;
/**
*
调用
WebService
接口
*
*
@param
methodName
WebService
的调用方法名
*
@param
mapParams
WebService
的参数集合,可以为
null
*
@param
reponseCallBack
服务器响应接口
*/
public
static
void
call(final
String
methodName,
SimpleArrayMap<String,
Object>
mapParams,
final
ResponseCallBack
reponseCallBack)
{
//
创建
HttpTransportSE
对象,传递
WebService
服务器地址
final
HttpTransportSE
transport
=
new
HttpTransportSE(ENDPOINT);
transport.debug
=
true;
//
身份验证(如果需要的话)
Element[]
header
=
new
Element[1];
//
传入命名空间与验证的方法名
header[0]
=
new
Element().createElement(NAMESPACE,
ID_HEADERNAME);
//
创建参数
1
Element
userName
=
new
Element().createElement(NAMESPACE,
ID_NAME_PARAM);
userName.addChild(Node.TEXT,
ID_NAME_VALUE);
header[0].addChild(Node.ELEMENT,
userName);
//
创建参数
2
Element
password
=
new
Element().createElement(NAMESPACE,
ID_PASSWORD_PARAM);
password.addChild(Node.TEXT,
ID_PASSWORD_VALUE);
header[0].addChild(Node.ELEMENT,
password);
//
创建
SoapObject
对象用于传递请求参数
final
SoapObject
soapObject
=
new
SoapObject(NAMESPACE,
methodName);
//
添加参数
if
(mapParams
!=
null)
{
for
(int
index
=
0;
index
<
mapParams.size();
index++)
{
String
key
=
mapParams.keyAt(index);
//
多数情况下,传递的参数都为
String
类型,不过少数情况下会有
boolean
类型,所以用
Object
代替
Object
value
=
mapParams.get(key);
soapObject.addProperty(key,
value);
}
}
//
实例化
SoapSerializationEnvelope,传入
WebService
的
SOAP
协议的版本号
//
这里有
VER10
VER11
VER12
三种版本,根据自己需要填写
final
SoapSerializationEnvelope
envelope
=
new
SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.headerOut
=
header;
//
身份验证(如果需要的话)
envelope.dotNet
=
isDotNet;
//
设置是否调用的是
.Net
开发的
WebService
envelope.bodyOut
=
soapObject;
//
传递参数
//envelope.setOutputSoapObject(soapObject);//
与上一句等价
//
用于与主线程通信的
Handler
final
Handler
responseHandler
=
new
Handler()
{
@Override
public
void
handleMessage(Message
msg)
{
super.handleMessage(msg);
//
根据消息的
arg1
值判断调用哪个接口
if
(msg.arg1
==
SUCCESS_FLAG)
{
reponseCallBack.onSuccess((String)
msg.obj);
}
else
{
reponseCallBack.onError((Exception)
msg.obj);
}
}
};
//
提交一个子线程到线程池并在此线种内调用
WebService
if
(threadPool
==
null
||
threadPool.isShutdown())
{
threadPool
=
Executors.newFixedThreadPool(threadSize);
}
threadPool.submit(new
Runnable()
{
@Override
public
void
run()
{
String
result
=
null;
try
{
//
解决
EOFException
System.setProperty("http.keepAlive",
"false");
//
连接服务器,有的服务可能不需要传递
NAMESPACE
+
methodName,第一个参数传递
null
transport.call(null,
envelope);
if
(envelope.getResponse()
!=
null)
{
//
获取服务器响应返回的
SoapObject
SoapObject
object
=
(SoapObject)
envelope.bodyIn;
result
=
object.getProperty(0).toString();
}
}
catch
(IOException
e)
{
//
当
call
方法的第一个参数为
null
时会有一定的概念抛
IO
异常
//
因此需要需要捕捉此异常后用命名空间加方法名作为参数重新连接
//
e.printStackTrace();
try
{
transport.call(NAMESPACE
+
methodName,
envelope);
if
(envelope.getResponse()
!=
null)
{
//
获取服务器响应返回的
SoapObject
SoapObject
object
=
(SoapObject)
envelope.bodyIn;
result
=
object.getProperty(0).toString();
}
}
catch
(Exception
e1)
{
//
e1.printStackTrace();
responseHandler.sendMessage(responseHandler.obtainMessage(0,
ERROR_FLAG,
0,
e1));
}
}
catch
(XmlPullParserException
e)
{
//
e.printStackTrace();
responseHandler.sendMessage(responseHandler.obtainMessage(0,
ERROR_FLAG,
0,
e));
}
finally
{
//
将获取的消息利用
Handler
发送到主线程
responseHandler.sendMessage(responseHandler.obtainMessage(0,
SUCCESS_FLAG,
0,
result));
}
}
});
}
/**
*
设置线程池的大小
*
*
@param
threadSize
*/
public
static
void
setThreadSize(int
threadSize)
{
WebServiceUtil.threadSize
=
threadSize;
threadPool.shutdownNow();
threadPool
=
Executors.newFixedThreadPool(WebServiceUtil.threadSize);
}
/**
*
服务器响应接口,在响应后需要回调此接口
*/
public
interface
ResponseCallBack
{
void
onSuccess(String
result);
void
onError(Exception
e);
}
}3.在Activity中使用private
void
request()
{
SimpleArrayMap<String,
Object>
map
=
new
SimpleArrayMap<>();
map.put
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【生物】人类的起源和发展 课后作业-2023-2024学年人教版生物七年级下册
- 工业产品表面缺陷自动检测系统技术要求 编制说明
- 江苏省南通市七年级下学期英语期中试卷(含答案)
- 2024年河南省信阳市固始县小升初语文重难点模拟卷含答案
- 技术联营合同
- 2024年江苏省宿迁市宿豫区六年级下学期模拟语文试题含答案
- 离婚协议房产车辆处理原则
- 离婚协议中子女抚养费用的核算
- 离婚协议条款设置原则
- 制定离婚协议的流程与注意事项
- 水痘健康教育知识
- 河北省2012土建定额说明及计算规则(含定额总说明)
- 深基坑开挖钢板桩支护施工专家评审施工方案(已论证)
- 大面积混凝土楼地面平整度及标高控制
- 简洁易用的个人简历表模板
- 大学校友会成立大会筹备方案
- (2021年整理)保温管道的热损失(精)
- 高校辅导员工作ppt.ppt
- (最新整理)开标现场监督记录表
- 分组法因式分解试题练习(含答案)
- 储气罐年度检验报告
评论
0/150
提交评论