Android关于WebService的开发的一些问题

最近开始实践做些Android的项目,开始接触webservice就碰壁,一个小问题困扰了两天时间,在网络上找了很多资料终于调通,先做些总结。

访问webservice的基本步骤包括:

1、首先要加载”ksoap2-android-assembly-2.5.2-jar-with-dependencies“jar包,直接将该jar文件放置到项目的libs文件夹下即可。

2、下面就可以按部就班的往下进行,在java文件中创建HttpTransportSE对象,HttpTransportSE httpTransportSE=new HttpTransportSE(SERVICE_URL);,该对象主要用作调用相关webservice的一些方法,来传送数据。

2、创建SoapSerilizationEnvelope对象,并声明使用的soap协议版本,SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

3、创建并实例化SoapObject对象,用于指定需要访问webservice的方法,SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);并将其关联到envelope对象的bodyOut属性,设置envelope的兼容性-envelope.dotNet = true;。注:不知道运行其他Android版本怎样,在4.0系统中此处还要通过envelope.setOutputSoapObject(soapObject)来指定其输出,否则,在访问webservice的数据时会报异常。

4、通过HttpTransportSE的call方法来取得特定的envelope对象,httpTranstation.call(SERVICE_NS + methodName, envelope);

5、通过SoapObject result = (SoapObject) envelope.bodyIn;和SoapObject detail = (SoapObject) result.getProperty(methodName+ "Result");来取出你要访问的数据。


注意:在4.0及以上系统(其他版本未尝试)一般情况下不支持在主线程中访问网络资源,故会报错,要解决此问题就需要在主Activity的onCreate中添加如下代码StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
               .detectDiskReads()
               .detectDiskWrites()
               .detectNetwork()   // or .detectAll() for all detectable problems
               .penaltyLog()
               .build());
       StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
               .detectLeakedSqlLiteObjects()
               .detectLeakedClosableObjects()
               .penaltyLog()
               .penaltyDeath()
               .build());

然后在运行APP可正常运行。


在主线程尽量不要访问网络资源,否则程序会显得不够流畅,最好在后台访问资源然后通过主线程来更新ui进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值