android 利用ksoap2方式连接webservice(2010-04-16 16:36:25)转载标签:androidksoap2webserviceit 分类:Android
??? 利用J2SE的ksoap2标准,我也来做一个山寨版本的android连接webservice。因为soap封装的关系,android application在接收到数据后不能够正确的按照J2SE的标准来获取。
??? 在运用之前,我们先要引导两个jar进入工程的buildpath
???
??? 这两个jar包都可以在网上查到下载,引导完后再做一项准备工作。弄清楚已发布的webservice的地址,以及封装的方式。比如:
webservice接口:http://192.168.0.2:8080/axis2/services/Manager?wsdl? (顺便说明一下,在android当中,不能写localhost,必须写清楚PC机当前的网络IP)
webservice封装:http://ws.apache.org/axis2
都了解了过后,说明已经做好准备了。
??? 下面就介绍一下android如何获取webservice封装数据。。
引入ksoap2中以封装好的类
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
在类中定义webservice的接口地址以及解析方式并且定义要调用的webservice中的函数
private static final String URL = "http://192.168.0.2:8080/axis2/services/Manager?wsdl";
private static final String NAMESPACE = "http://ws.apache.org/axis2";
private static final String METHOD_NAME = "GetMyFriends";
这个信息我们可以在webservice中查到
<xs:element name="GetMyFriends">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="userId" type="xs:int"/>
<xs:element minOccurs="0" name="password" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
接下来开始做对webservice请求数据的工作,请求webservice函数以及封装要用的两个参数(userId和password)
??? SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
??? request.addProperty("userId", "123456");
??? request.addProperty("password", "test");
之后我们给定义发送数据的信封的封装格式
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11 );
发出请求
envelope.setOutputSoapObject(request);
AndroidHttpTransport aht = new AndroidHttpTransport(URL);
aht.call(null, envelope);
接着就可以定义一个SoapObject类型的实例去获取我们返回来的数据
SoapObject so = (SoapObject) envelope.bodyIn;
这里如果是返回来的数据只有一行并且只有一个值,比如验证函数,返回boolean类型的话,操作比较简单,String getReturn= so.getProperty("return");? 这个getReturn就是你要获取的值。
但是如果返回来是多行的值的话,这个方法就不行了,我们必须对返回来的信息做一些解析。我曾试过用J2SE的标准方式来获取,但是会报错,最主要
的可能是他的方式在android当中不能使用。所以在这里我用了正则表达式这种方式来进行数据的解析,我们先来看一下他返回的数据的结构是什么情况。
GetMyFriendsResponse{return=FriendsMessage{
permitList=anyType{nickName=我爱罗; singnature=null; userId=2; };
permitList=anyType{nickName=jack; singnature=null; userId=1004; };
permitList=anyType{nickName=admin; singnature=leo_admin; userId=1001;
};};}
简单看他很想Json结构,但是确不是。。。
就目前的解决方式,我只是通过规律来进行了正则表达式的解析:如解析上面的内容。
??????????? //首先取得permitList(好友)的个数
??????????? String testPattern = "permitList";
??????????? int resultlength = result.length();
??????????? cresult = cresult.replace(testPattern, "");
??????????? int lastlength = (resultlength - cresult.length()) / testPattern.length();
??????????
??????????? //取得每个permitList中的值。
??????????? String LoginReturn="", pattern="nickName=.*?;\\s*singnature=.*?;\\s*userId=.*?;";
??????????? //动态生成String 数组,存储每个好友的信息
??????????? String[] GetFinalReturn = new String[lastlength];
??????????? for (int i=0;i<lastlength;i++){
??????????????? LoginReturn = result.replaceFirst("^.*("+pattern+").*$", "$1");
??????????????? GetFinalReturn[i] = LoginReturn;
??????????????? result = result.replace(LoginReturn,"");
??????????? }
这个数组里面存储的格式就是nickName=admin; singnature=leo_admin; userId=1001;
这样以来,我们可以根据"="和";"两个符号之间做split操作就可以得到数据。
好了,到此连接webservice和解析返回来的数据的工作就做完了,虽然这个方式看起来很复杂,但是目前来说,用ksoap2方式来连接webservice暂时还没有找到更有效的解决方式。。
详细解决方案
转载 android 利用ksoap2模式连接webservice
热度:270 发布时间:2012-09-03 09:48:39.0
相关解决方案
- java webservice 客户端调用服务器端同时发出多条请求~求高手解决思路
- webservice 赋值有关问题
- cxf webservice 返回json字符串时,数值型的字符串双引号不见了
- android 读取byte[]中的元素解决方案
- android 标题栏兑现方式
- android 中Activity向BroadcastReceiver发送数据,该怎么解决
- Android 4.0 为什么模拟器老是提示小弟我谷歌拼音输入法已停止
- android:getSharedPreferences() 这是哪个类的方法解决思路
- android 怎么判断一个程序是否联网
- android 大量数据按周分组,该如何解决
- android RadioButton如何设置默认选中
- webservice…解决方法
- 请问用过ksoap的前辈:Error verifying method org/ksoap2/serialization/SoapObject equals(Ljava/lang/Object;)Z
- 为什么会出现java.lang.NoClassDefFoundError: org/ksoap2/SoapFault,该如何解决
- 高手~J2ME客户端,AXIS支撑的TOMCAT WEBSERVICE,两点间可以实现图片和文本数据的户传吗?特别是WEBSERVICE 端传给J2ME端
- ksoap2-android-这个包,连接webService怎么设置超时
- android 怎么重新设置锚点
- android UI界面设计解决方案
- android 图片对象获取的有关问题
- webservice 开发方式解决办法
- android 怎么调用淘宝支付宝接口
- Android 沿袭InputMethodService自定义输入法
- android 关于服务连接的疑义
- android 两个activity如何通信
- android 怎么实现对view的放大和缩小
- android 教程解决方法
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- android(java)中的java.net能不能和c#的system.net.sockets进行tcp通信,该如何解决