Android发送SOAP数据给服务器调用webservice,实现手机号归属地查询

来源:互联网 发布:什么是数据转换 编辑:程序博客网 时间:2024/06/10 22:28

创建android工程MobileBelong,设置网络访问权限。

 

资源

    <string name="hello">Hello World, MainActivity!</string>    <string name="app_name">手机号归属地查询</string>    <string name="mobile">手机号</string>    <string name="button">查询</string>    <string name="error">网络连接失败</string>

布局

TextView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/mobile" />    <EditText        android:id="@+id/mobile"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="13472283596" />    <Button        android:id="@+id/button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/button" />    <TextView        android:id="@+id/result"        android:layout_width="fill_parent"        android:layout_height="wrap_content" />

在src目录下创建mobilesoap.xml,并将网址文档中提供的代码复制其中,如下

<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">  <soap12:Body>    <getMobileCodeInfo xmlns="http://WebXml.com.cn/">      <mobileCode>$mobile</mobileCode>      <userID></userID>    </getMobileCodeInfo>  </soap12:Body></soap12:Envelope>

业务类:MobileService

注意访问目标地址是:

http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx

可以有协议中得到。


package cn.class3g.service;…public class MobileService {public static String getMobileAddress(String mobile) throws Exception {InputStream inStream = MobileService.class.getClassLoader().getResourceAsStream("mobilesoap.xml");byte[] data = StreamTool.readInputStream(inStream);String xml = new String(data);String soap = xml.replaceAll("\\$mobile", mobile);/** * 正则表达式$为特殊正则中的特殊符号须转义,即\$mobile * 而\为字符串中的特殊符号,所以用两个反斜杠,即"\\{1}quot; */String path = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";data = soap.getBytes();// 得到了xml的实体数据URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5 * 1000);conn.setRequestMethod("POST");conn.setDoOutput(true);conn.setRequestProperty("Content-Type","application/soap+xml; charset=utf-8");conn.setRequestProperty("Content-Length", String.valueOf(data.length));OutputStream outStream = conn.getOutputStream();outStream.write(data);outStream.flush();outStream.close();if (conn.getResponseCode() == 200) {InputStream responseStream = conn.getInputStream();return parseXML(responseStream);}return null;}/** * 解析返回xml数据 *  * @param responseStream * @return * @throws Exception */private static String parseXML(InputStream responseStream) throws Exception {XmlPullParser parser = Xml.newPullParser();parser.setInput(responseStream, "UTF-8");int event = parser.getEventType();while (event != XmlPullParser.END_DOCUMENT) {switch (event) {case XmlPullParser.START_TAG:if ("getMobileCodeInfoResult".equals(parser.getName())) {return parser.nextText();}break;}event = parser.next();}return null;}}

工具类StreamTool

package cn.class3g.utils;…public class StreamTool {/** * 从输入流读取数据 * @param inStream * @return * @throws Exception */public static byte[] readInputStream(InputStream inStream) throws Exception{ByteArrayOutputStream outSteam = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while( (len = inStream.read(buffer)) !=-1 ){outSteam.write(buffer, 0, len);}outSteam.close();inStream.close();return outSteam.toByteArray();}}Activity类MobileBelongActivitypackage cn.class3g.mobile;…public class MobileBelongActivity extends Activity {private static final String TAG = "MainActivity";private EditText mobileText;private TextView resultView;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);mobileText = (EditText) this.findViewById(R.id.mobile);resultView = (TextView) this.findViewById(R.id.result);Button button = (Button) this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String mobile = mobileText.getText().toString();try {String address = MobileService.getMobileAddress(mobile);resultView.setText(address);} catch (Exception e) {Log.e(TAG, e.toString());Toast.makeText(MobileBelongActivity.this, R.string.error, 1).show();}}});}}



原创粉丝点击