Android中Web Service学习(二)——Android调用Web Service实例
来源:互联网 发布:雅思阅读书 知乎 编辑:程序博客网 时间:2024/05/21 17:54
在上一篇文章Android中的Web Service学习(一)——Web Service介绍中已经介绍了Android中Web Service的基本概念,也对Web Service有了一个基本的了解,下面我们以实例来了解Android中如何调用Web Service。
实例:我们以查询手机号码的归属地Web Service为例
在www.webxml.com.cn网站提供了手机号码归属地查询的Web Serivce,进入该网站中的手机号码归属地查询中,可以看到该Web Service的请求和响应示例。网站上分别提供了基于SOAP1.1和SOAP1.2协议的请求和响应示例,我们使用基SOAP1.2的。同时分别提供了使用POST和GET请求的请求和响应示例,我们以POST请求为例,下图就是手机号码归属地查询的基于SOAP1.2的Web Service的POST请求的请求和响应示例。
我们把请求示例中需要发送的XML数据保存到一个文件中放入Android项目的assets目录。,保存的时候< mobileCode >string< /mobileCode >中string替换成$mobile,因为发送请求的时候需要需要替换成输入的手机号码,因为免费用户userID为空,所以< userID >string < /userID >
直接变为< userID >< /userID>即可。
我们这里的例子调用Web Service服务的方式实际就上就是通过Http请求,发送相应的XML请求参数,然后解析返回的XML数据,我们这里的这种做法是不使用SOAP提供的相关请求方法,而是使用纯Http请求来调用Web Service,而在标准的开发过程中可能还需要使用SOAP的架包,使用SOAP架包中提供的请求Web Servcie的方法,和解析返回数据的方法来调用Web Servcie
请参考柳峰的
Android平台调用WebService详解
这篇文章来了解使用SOAP的提供相关方法来调用Web Service。
那么我们这里调用Web Service的流程是这样的,从asstes目录中的getMobileAddressService.xml文件中读取查询手机号码归属地这个Web Service请求时需要携带的请求数据,然后发送Http请求,响应的数据也是XML格式的,我们解析XML响应数据,得到手机号码归属地即可。
查询手机号码归属地Aandroid项目的主要代码如下:
布局文件 activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.android.webservice.test.MainActivity" > <EditText android:id="@+id/telEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入电话号码" /> <Button android:id="@+id/queryTel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/telEditText" android:text="查询归属地" > </Button> <TextView android:id="@+id/showAddressTv" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_below="@id/queryTel" > </TextView></RelativeLayout>
MainActivity的代码
public class MainActivity extends Activity implements OnClickListener { static final String TAG = "WebService"; EditText telEditText; Button queryBtn; TextView showAddressTv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } public void initView() { telEditText = (EditText) findViewById(R.id.telEditText); queryBtn = (Button) findViewById(R.id.queryTel); showAddressTv = (TextView) findViewById(R.id.showAddressTv); queryBtn.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.queryTel: getAddress(telEditText.getText().toString()); break; default: break; } } Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { String address = (String) msg.obj; showAddressTv.setText(address); }; }; public void getAddress(final String mobile) { new Thread() { public void run() { String address = ""; InputStream responseIs = null; OutputStream os = null; HttpURLConnection conn = null; URL url = null; try { InputStream is = getAssets().open("getMobileAddressService.xml", Context.MODE_WORLD_READABLE); String content = XMlTools.readXMLFile(is); Log.i(TAG, content); url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx"); conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("Content-Type", "application/soap+xml"); conn.setRequestMethod("POST"); String s = content.replaceAll("\\$mobile", mobile); os = conn.getOutputStream(); os.write(s.getBytes()); os.flush(); os.close(); System.out.println("---->" + "请求成功" + "," + s); responseIs = conn.getInputStream(); XmlPullParser xmlPullParse = Xml.newPullParser(); xmlPullParse.setInput(responseIs, "utf-8"); int event = xmlPullParse.getEventType(); while (event != XmlPullParser.END_TAG) { if (event == XmlPullParser.START_TAG) { if (xmlPullParse.getName().equals("getMobileCodeInfoResult")) { address = xmlPullParse.nextText(); Log.i(TAG, address); Message msg = handler.obtainMessage(); msg.obj = address; handler.sendMessage(msg); } } event = xmlPullParse.next(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }.start(); }}
MainActivity中使用到了一个XML工具类(XMLTools)中读取XML文件中数据的方法-readXMLFile(InputStream xmlIs),下面是这个XML工具类的编写:
public class XMlTools { public static String readXMLFile(InputStream xmlIs) { String content = ""; BufferedReader br = null; br = new BufferedReader(new InputStreamReader(xmlIs)); String line = ""; try { while ((line = br.readLine()) != null) { content += line; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return content; } finally { try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return content; } } return content; }}
最后别忘了添加网络访问权限
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.webservice.test" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
运行结果
- Android中Web Service学习(二)——Android调用Web Service实例
- Android 调用 Web Service
- android调用web service(cxf)实例
- android调用web service(cxf)实例
- android调用web service(cxf)实例
- android调用web service(cxf)实例
- android调用web service(cxf)实例
- android调用web service(cxf)实例
- Android平台调用Web Service实例解析
- android调用web service(cxf)实例
- Android学习之调用Web Service
- android中调用.net web service
- android中调用.net web service
- Android中的Web Service学习(一)——Web Service介绍
- Android 调用web service 方法
- Android调用web service服务
- Android调用web service服务
- Android调用web service服务
- JAVA的命名规则
- VMware 克隆虚拟机 无法连接网络问题
- netsh绑定ip和mac地址
- 纪念我找回之前的状态
- Ext.form.VTypes
- Android中Web Service学习(二)——Android调用Web Service实例
- Python 装饰器的理解
- non-zero exit value 1,non-zero exit value 2, non-zero exit value 3错误解决办法
- Linux下Tomcat7部署
- Android报unsupported major.minor version 52.0错误
- Unity 富文本 支持HTML标签
- Mac OS 常用快捷键
- Qt小游戏开发:扫雷
- 弹出窗加倒计时