ksoap2-ksoap2 android jarproject开源吗

android(107)
& & 之前主要做客户端UI交互,很少处理数据和接触服务端,但现在的移动设备根本不可能离得开网络连接,数据的交换。最近学习的是在android端如何去调用远程WebService,都说WebService是一种基于SOAP协议的远程调用标准,对于这个协议理解不深,知道webservice可以将不同操作系统平台、不同语言、不同技术整合到一块,android SDK没有直接调用webservice的库,最常用的是借助ksoap2-android这个第三方SDK,,然后和其他第三方jar包一样导入android项目中即可。
&&&&&&& 对于WebService服务器具体的编写,现阶段自己不了解,暂且使用网络免费的WebService进行学习,利用这个来写一个简单的国内天气预报的查询,代码编写参照《疯狂Android讲义》相关部分,自己做部分修改。
-------------------------------------------------------------------------------------------------------------
&&&&&&&以下是几个主要的方法:
1.创建HttpTransportSE传输对象:HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); SERVICE_URL是webservice提供服务的url
2.使用SOAP1.1协议创建Envelop对象:SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 设置SOAP协议的版本号,根据服务端WebService的版本号设置。
3.实例化SoapObject对象:SoapObject soapObject = new SoapObject(SERVICE_NAMESPACE, methodName); 第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。
4.设置调用方法的参数值,如果没有参数,可以省略:例如soapObject.addProperty(&theCityCode&, cityName);
5.记得设置bodyout属性 envelope.bodyOut = soapO
6.调用webservice:ht.call(SERVICE_NAMESPACE+methodName, envelope);
7.获取服务器响应返回的SOAP消息:
&&&& SoapObject result = (SoapObject) envelope.bodyIn;
&&&&&SoapObject detail = (SoapObject) result.getProperty(methodName+&Result&);
-------------------------------------------------------------------------------------------------------------
在这个天气预报的demo中需要多次调用webservice,将方法写在一个工具类中,代码如下:
SoapObject 解析
//当返回值为数组对象
SoapObject result = (SoapObject) envelope.bodyIn;
for (int i = 0; i & result.getPropertyCount(); i++) {
SoapObject child = (SoapObject) result.getProperty(i);
ProduceScanInfo produce = new ProduceScanInfo();
produce.setDepartment(child.getProperty(&department&).toString());
produce.setEmployeeNo(child.getProperty(&employeeNo&).toString());
produce.setEmployee(child.getProperty(&employee&).toString());
produce.setOrderno(child.getProperty(&orderno&).toString());
produce.setProductname(child.getProperty(&productname&).toString());
produce.setColor(child.getProperty(&color&).toString());
produce.setSize(child.getProperty(&size&).toString());
produce.setColorno(child.getProperty(&colorno&).toString());
produce.setWorkname(child.getProperty(&workname&).toString());
produce.setPackno(Integer.parseInt(child.getProperty(&packno&).toString()));
produce.setNumber(Integer.parseInt(child.getProperty(&number&).toString())); &
System.out.println(produce);
& &list.add(produce);
//返回值为boolean
public boolean isExistUser(String sql) {
this.setMethodName(&isExistUser&);
initConfig(sql);
Object soapObject =
if (envelope.bodyIn instanceof SoapFault) {
String str = ((SoapFault) envelope.bodyIn).
Log.i(&&, str);
soapObject = (Object) envelope.getResponse();
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
return Boolean.parseBoolean(soapObject.toString());
上面这个便是主要实现远程调用webservice的代码,其他实现在activity中完成即可,但是这里也会涉及到一个问题,就是Android多线程问题,在调用webservice时,为了防止ANR的出现,不能在主线程中进行,需要另开子线程执行,,因为子线程涉及到UI更新,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的.便要涉及Handler的使用了,实在是不才,自己更多时候习惯使用AsyncTask来代替Handler(还是要重新琢磨下Handler的使用方法),因为操作起来比较简单方便,下面是项目中异步操作类中的一个:
可以看出来比较简单,在doInBackground中执行调用webservice,在onPostExecute中执行列表刷新展示
Could not find class 'org.ksoap2.serialization.SoapObject', referenced from method com.neusoft.kunming.WebservercallActivity.getWeather
java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject
解决方法: 导入ksoap2.jar,最后不要忘记一定要用 Add External Jars... 不能用Add Jars
然后要在Orader and Export 钩选你的ksoap2.jar,否则不会导出到APK
最后附上该demo的代码,希望可以对初涉及android调用webservice的朋友有帮助
SOAP解析实例
package com.nautinus.
import java.io.IOE
import java.util.ArrayL
import java.util.D
import java.util.P
import java.util.ResourceB
import org.ksoap2.SoapE
import org.ksoap2.SoapF
import org.ksoap2.serialization.SoapO
import org.ksoap2.serialization.SoapSerializationE
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserE
import android.util.L
import com.nautinus.activity.R;
import com.nautinus.bean.M
import com.nautinus.bean.MachinesM
import com.nautinus.bean.U
public class SopExquery {
private String nameSpace = &&;
private String serviceUrl = &http://192.168.5.44:5678/axis2/services/NautiusQueryService?wsdl&;
private String methodN
private SoapSerializationE
private ArrayList&Machines& list = new ArrayList&Machines&();
private ArrayList&MachinesMaintain& maintainlist = new ArrayList&MachinesMaintain&();
public String getNameSpace() {
return nameS
public void setNameSpace(String nameSpace) {
this.nameSpace = nameS
public String getMethodName() {
return methodN
public void setMethodName(String methodName) {
this.methodName = methodN
public String getServiceUrl() {
return serviceU
public void setServiceUrl(String serviceUrl) {
this.serviceUrl = serviceU
public void initConfig(String sql) {
SoapObject request = new SoapObject(nameSpace, methodName);
request.addProperty(&sql&, sql);
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut =
HttpTransportSE ht = new HttpTransportSE(serviceUrl);
ht.debug =
ht.call(nameSpace + methodName, envelope);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
* 查询机器状态
* @param sql
public ArrayList&Machines& query(String sql) {
this.setMethodName(&executeMachineStateQuery&);
initConfig(sql);
if (envelope.bodyIn instanceof SoapFault) {
String str = ((SoapFault) envelope.bodyIn).
Log.i(&&, str);
SoapObject result = (SoapObject) envelope.bodyIn;
for (int i = 0; i & result.getPropertyCount(); i++) {
SoapObject child = (SoapObject) result.getProperty(i);
System.out.println(child);
Machines produce = new Machines();
if (child.getProperty(&roomCode&) == null) {
produce.setRoomCode(& &);
produce.setRoomCode(child.getProperty(&roomCode&)
.toString());
if (child.getProperty(&groupCode&) == null) {
produce.setGroupCode(& &);
produce.setGroupCode(child.getProperty(&groupCode&)
.toString());
if (child.getProperty(&machCode&) == null) {
produce.setMachCode(-1);
produce.setMachCode(Integer.parseInt(child.getProperty(
&machCode&).toString()));
if (child.getProperty(&state&) == null) {
produce.setState(-1);
produce.setState(Integer.parseInt(child
.getProperty(&state&).toString()));
System.out.println(produce);
list.add(produce);
* 查询订单信息
public ArrayList&MachinesMaintain& executeMaintainQuery(String sql) {
this.methodName = &executeMaintainQuery&;
initConfig(sql);
if (envelope.bodyIn instanceof SoapFault) {
String str = ((SoapFault) envelope.bodyIn).
Log.i(&&, str);
SoapObject result = (SoapObject) envelope.bodyIn;
if (result != null) {
for (int i = 0; i & result.getPropertyCount(); i++) {
SoapObject child = (SoapObject) result.getProperty(i);
// System.out.println(child);
MachinesMaintain order = new MachinesMaintain();
order.setId(Integer.parseInt(child.getProperty(&id&)
.toString()));
if (&&.equals(child.getProperty(&roomCode&).toString()
.trim())) {
order.setRoomCode(& &);
order.setRoomCode(child.getProperty(&roomCode&)
.toString().trim());
if (&&.equals(child.getProperty(&groupCode&).toString()
.trim())) {
order.setGroupCode(& &);
order.setGroupCode(child.getProperty(&groupCode&)
.toString().trim());
if (&&.equals(child.getProperty(&machCode&).toString()
.trim())) {
order.setMachCode(0);
order.setMachCode(Integer.parseInt(child.getProperty(
&machCode&).toString()));
if (&&.equals(child.getProperty(&state&).toString().trim())) {
order.setState(-1);
order.setState(Integer.parseInt(child.getProperty(
&state&).toString()));
if (&&.equals(child.getProperty(&stopReason&).toString()
.trim())) {
order.setStopReason(& &);
order.setStopReason(child.getProperty(&stopReason&)
.toString().trim());
if (&&.equals(child.getProperty(&dateStartShift&)
.toString().trim())) {
order.setDateStartShift(&&);
order.setDateStartShift(child
.getProperty(&dateStartShift&).toString()
if (&&.equals(child.getProperty(&serviceMan&).toString()
.trim())) {
order.setServiceMan(&&);
order.setServiceMan(child.getProperty(&serviceMan&)
.toString().trim());
if (&&.equals(child.getProperty(&receiveDate&).toString()
.trim())) {
order.setReceiveDate(&&);
order.setReceiveDate(child.getProperty(&receiveDate&)
.toString().trim());
if (&&.equals(child.getProperty(&okDate&).toString().trim())) {
order.setOkDate(&&);
order.setOkDate(child.getProperty(&okDate&).toString()
order.setReceiveFlag(Integer.parseInt(child.getProperty(
&receiveFlag&).toString()));
order.setOkFlag(Integer.parseInt(child
.getProperty(&okFlag&).toString()));
System.out.println(order.getId());
maintainlist.add(order);
public boolean isExistUser(String sql) {
this.setMethodName(&isExistUser&);
initConfig(sql);
Object soapObject =
if (envelope.bodyIn instanceof SoapFault) {
String str = ((SoapFault) envelope.bodyIn).
Log.i(&&, str);
soapObject = (Object) envelope.getResponse();
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
return Boolean.parseBoolean(soapObject.toString());
public boolean insertUser(String sql) {
this.setMethodName(&insertUser&);
initConfig(sql);
Object soapObject =
if (envelope.bodyIn instanceof SoapFault) {
String str = ((SoapFault) envelope.bodyIn).
Log.i(&&, str);
soapObject = (Object) envelope.getResponse();
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
return Boolean.parseBoolean(soapObject.toString());
public boolean updateUser(String sql) {
this.setMethodName(&updateUser&);
initConfig(sql);
Object soapObject =
if (envelope.bodyIn instanceof SoapFault) {
String str = ((SoapFault) envelope.bodyIn).
Log.i(&&, str);
soapObject = (Object) envelope.getResponse();
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
return Boolean.parseBoolean(soapObject.toString());
public User queryUser(String sql) {
this.setMethodName(&queryUser&);
initConfig(sql);
User user = new User();
if (envelope.bodyIn instanceof SoapFault) {
String str = ((SoapFault) envelope.bodyIn).
Log.i(&&, str);
SoapObject result = (SoapObject) envelope.bodyIn;
System.out.println(result);
if (result != null) {
SoapObject child = (SoapObject) result.getProperty(0);
// System.out.println(&child--& + child);
if (child.getProperty(&plantCode&) == null) {
user.setPlantCode(& &);
user.setPlantCode(child.getProperty(&plantCode&).toString());
if (child.getProperty(&roomCode&) == null) {
user.setRoomCode(& &);
user.setRoomCode(child.getProperty(&roomCode&).toString());
if (child.getProperty(&groupCode&) == null) {
user.setGroupCode(& &);
user.setGroupCode(child.getProperty(&groupCode&).toString());
if (child.getProperty(&userName&) == null) {
user.setUserName(&&);
user.setUserName(child.getProperty(&userName&).toString());
if (child.getProperty(&userPhoneNumber&) == null) {
user.setUserPhoneNumber(&&);
user.setUserPhoneNumber(child
.getProperty(&userPhoneNumber&).toString());
if (child.getProperty(&inDate&) == null) {
user.setInDate(&&);
user.setInDate(child.getProperty(&inDate&).toString());
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:198197次
积分:3711
积分:3711
排名:第6818名
原创:140篇
转载:234篇
评论:11条升级&&19.33%
精华0帖子e币222 元
&发表于&昨天&11:41&|&|
开源项目不胜枚举,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。
1.& && &&&ZXing&&/p/zxing/
条形码、二维码
2.& && &&&K-9 Mail&/p/k9mail/
邮件客户端
3.& && &&&Sipdroid&/p/sipdroid/
SIP/VoIP&客户端
4.& && &&&Openintents&/p/openintents/
提供了大量的应用程序,使用intent,简化开发
5.& && &&&Libgdx&/p/libgdx/
游戏开发框架
6.& && &&&opensudoku-android&/p/opensudoku-android/
7.& && &&&softkeyboard&/p/softkeyboard/
8.& && &&&apps-for-android&/p/apps-for-android/
大量andorid实例
9.& && &&&android-vnc-viewer&/p/android-vnc-viewer/
10.& & mytracks&/p/mytracks/
记录gps轨迹
11.& & androidscreencast&/p/androidscreencast/
电脑控制android的设备
12.& & ksoap2-android&/p/ksoap2-android/
13.& & bestcardgameever-android/&/p/bestcardgameever-android/
14.& & coordinate-talk&/p/coordinate-talk/
基于地理的社交平台国人写的
15.& & skylight1&/p/skylight1/
包含Android应用程序与示例。
16.& & android-shuffle&/p/android-shuffle/
GTD(GettingThingsDone)个人备忘记事本
17.& & fanfoudroid&/p/fanfoudroid/
饭否Android客户端
18.& & android-smspopup&/p/android-smspopup/
19.& & swiftp&/p/swiftp/
20.& & callmeter&/p/callmeter/
21.& & andors-trail&/p/andors-trail/
类似于地牢猎手的角色扮演游戏
22.& & remotedroid&/p/remotedroid/
手机远程控制电脑
23.& & acra&/p/acra/
软件崩溃报告
24.& & transdroid&/p/transdroid/
手机远程控制电脑下载
25.& & andless&/p/andless/
可以播放无损音乐的音乐播放器
26.& & thelements&/p/thelements/
一个砂子游戏
27.& & ipcamera-for-android&/p/ipcamera-for-android/
网络摄像机
Views(...) Comments()匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。android KSOAP2解析调用webservice手机网络无法调用 - 开源中国社区
当前访客身份:游客 [
当前位置:
android KSOAP2解析调用webservice手机网络无法调用,wifi net网络是可以
测试移动网络cmnet,cmwap。无法访问webservice。。
谁遇到过这样的问题?有什么解决方案呢?
---------------问题补充---------------
:错误信息
org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://www.w3.org/2003/05/soap-envelope}Envelope (position:START_TAG &HTML&@2:7 in java.io.InputStreamReader@4178da10)
:今天又测试了,有的.net的webarvice调用正常,有的还是那个错误。比如.cn的天气预报,手机网络就是调用不了。
共有5个答案
<span class="a_vote_num" id="a_vote_num_
我也遇到了一模一样的问题,请问楼主解决了没有
--- 共有 1 条评论 ---
无法解决。移动网络就访问不了他的服务!
(4年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
楼主这个问题解决了吗& 我也遇到了这个问题
<span class="a_vote_num" id="a_vote_num_
我也碰到这个问题了,不得不用实体设备代替虚拟设备了。
--- 共有 1 条评论 ---
我就在实体设备上跑的,不过我感觉是ksoap访问某些地址的时候无法解析造成的。
(4年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
这个里面的有个方法比较慢可能是连接超时没有取到数据建议你把在取出数据那输出下看看是否有数据被请求过来。
<span class="a_vote_num" id="a_vote_num_
把真机的移动网络设置成wap就好了,我设置成了就好了,开头是net
更多开发者职位上
有什么技术问题吗?
using的其它问题
类似的话题ksoap2-android 包调用2次以上就报错 - 开源中国社区
当前访客身份:游客 [
当前位置:
错误日志如下:
12-26 09:25:45.515: W/System.err(1301): org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@461a8c40)
12-26 09:25:45.524: W/System.err(1301):
at org.kxml2.io.KXmlParser.exception(KXmlParser.java:273)
12-26 09:25:45.524: W/System.err(1301):
at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:1420)
12-26 09:25:45.524: W/System.err(1301):
at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126)
12-26 09:25:45.524: W/System.err(1301):
at org.ksoap2.transport.Transport.parseResponse(Transport.java:96)
12-26 09:25:45.565: W/System.err(1301):
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:189)
12-26 09:25:45.565: W/System.err(1301):
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
12-26 09:25:45.565: W/System.err(1301):
at com.besttone.rmation.ws.stub.ScheduleWebService.getSchedule(ScheduleWebService.java:161)
12-26 09:25:45.565: W/System.err(1301):
at com.besttone.rmation.activity.ScheduleDetailActivity$2.doInBackground(ScheduleDetailActivity.java:293)
12-26 09:25:45.565: W/System.err(1301):
at com.besttone.rmation.activity.ScheduleDetailActivity$2.doInBackground(ScheduleDetailActivity.java:1)
12-26 09:25:45.565: W/System.err(1301):
at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-26 09:25:45.565: W/System.err(1301):
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-26 09:25:45.565: W/System.err(1301):
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-26 09:25:45.565: W/System.err(1301):
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
12-26 09:25:45.565: W/System.err(1301):
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
12-26 09:25:45.565: W/System.err(1301):
at java.lang.Thread.run(Thread.java:1096)
网上查了下好像是jar包有问题,具体是什么问题有谁知道不?
ksoap2-android-assembly-2.5.8-jar-with-dependencies.jar & &用的这个包
共有2个答案
<span class="a_vote_num" id="a_vote_num_
日志你们复制出来看下。。。
<span class="a_vote_num" id="a_vote_num_
这个问题我遇到过,当时是1秒钟调用11次请求导致失败,解决的方法是写一个轮询机制,一旦发送失败延迟 &300 毫秒重发,目前运行没发现问题,可以参考一下。
--- 共有 1 条评论 ---
跟我的思路差不多 但是这并没有解决这个BUG啊。。。
(4年前)&nbsp&
更多开发者职位上
有什么技术问题吗?
黑狗的其它问题

我要回帖

更多关于 ksoap2 android 3.6.2 的文章

 

随机推荐