Android WebService
一、WebService
按某种数据规范发布的一种服务形式,为应用程序提供相应数据。
如这个天气预报Web服务:
二、简单样例
搜索Android WebService就可以找到很多了==,就简单讲讲了。
1)一样使用的是KSOAP第三方类库
-
-
-
-
-
-
-
-
-
- private SoapObject visitWebService(String methodName,
- PropertyInfo propertyInfo) throws Exception {
-
- if (null != onWebServiceListener) {
- onWebServiceListener.onStart();
- }
-
-
- SoapObject request = new SoapObject(Code.SERVICE_NAMESPACE, methodName);
-
- if (null != propertyInfo) {
- request.addProperty(propertyInfo);
- }
-
- SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
-
- SoapEnvelope.VER11);
-
- envelope.bodyOut = request;
-
- envelope.dotNet = true;
- envelope.setOutputSoapObject(request);
- envelope.encodingStyle = "UTF-8";
-
- HttpTransportSE ht = new HttpTransportSE(Code.SERVICE_URL);
- try {
-
-
-
-
- ht.call(Code.SERVICE_NAMESPACE + methodName, envelope);
-
- SoapObject soapObject = (SoapObject) envelope.getResponse();
-
-
-
- Log.v("返回结果", "=" + soapObject);
-
- return soapObject;
- } catch (Exception e) {
- e.printStackTrace();
- Log.e("HttpTransportSE.call", "调用WebService出错!");
- if (null != onWebServiceListener) {
- onWebServiceListener.onError();
- }
- throw e;
- }
- }
在org.join.weather.util内的WebService把Web服务提供的所有接口都装在里面了。
记得当时主要有个怎么从多行多列的返回结果中的获得信息的问题。开始用正则,后来直接下网页进行XML解析,提高了很多效率。
2)界面划成了三块,用的别人的画廊组件(加了点东西,中文注释的就是我加的了==)
组件见包org.join.weather.widget下的FlingGallery。包内另一个MySpinner则是扩展的组件,用于省份和城市的联动。
顺便提下左右滑屏也可以用Android扩展的android-support-v4.jar内的ViewPager。
3)其他问题
1、网络刚开始只当是Wifi(怨念==),后来才修改成了连接状态,总之流程感觉怪怪的了。在org.join.weather.broadcast的WifiReceiver内还可以看到注释的旧代码。
2、GPSUtil那块,如果未开启GPS时会跳转到设置,但你不开启回来再操作,会有个provider=null的异常未处理。另外,不确定能不能定到位了。还发现三个定位模式的代码都有写(没印象了,囧)。
4)截个图,看看效果吧
![city.png]()
三、后记
源码问题多多,还请各位大哥多多包涵了T^T。
ps:如果想自己发布WebService自己访问什么的,我的《
Android基础样例》里有一个这方面的简单例子。