Android 向服务器发送XML数据及调用webservice
首先講一下webservice概念
可以看作是網(wǎng)絡(luò)上的API,不過不是是通過new XXX().api()調(diào)用;
調(diào)用方式:客戶端發(fā)送一段xml到服務(wù)器,在xml中指定要調(diào)用的方法的名稱,以及各項參數(shù),當(dāng)服務(wù)器得到內(nèi)容后進行解析,解析出方法名稱和參數(shù)后執(zhí)行相應(yīng)的方法之后,將結(jié)果也封裝成xml響應(yīng)發(fā)回給客戶端;客戶端再進行解析得到執(zhí)行結(jié)果!
下面是一個例子,最常見的獲取手機號碼歸屬地的Demo
先看結(jié)果,為了方便,我把結(jié)果打印到控件臺:
1、設(shè)置布局文件,這里省略,看界面都能比較簡單的設(shè)計出布局文件。
2、登錄到http://www.webxml.com.cn
可以看到手機號碼歸屬地的服務(wù)請求的XML
POST /WebServices/MobileCodeWS.asmx HTTP/1.1 <!-- 請求的URI --> Host: webservice.webxml.com.cn <!--Host主機--> Content-Type: application/soap+xml; charset=utf-8 <!-- Content-Type --> Content-Length: length?
<?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>string</mobileCode> <!--手機號碼,使用的時候用一個占位符進行替換--><userID>string</userID></getMobileCodeInfo></soap12:Body> </soap12:Envelope>3、將上面每二個xml添加到一個xml文件中,并放在類路徑下,名為soap12.xml;其中的手機號碼用占位符替換掉,并編寫業(yè)務(wù)類;
public class MobileAddresService {// 獲取手機號歸屬地public static String gerAddress(String mobile) throws Exception,IOException {String path = "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx";HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();String soap = readSoap();soap = soap.replaceAll("\\$mobile", mobile);// 我的xml文件中手機號碼用的是$mogile替換的。byte[] entity = soap.getBytes("UTF-8");conn.setDoInput(true);conn.setConnectTimeout(10000);conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");conn.setRequestProperty("Content-Length", entity.length + "");conn.getOutputStream().write(entity);if (conn.getResponseCode() == 200) { return parseSOAP(conn.getInputStream());}return null;}private static String parseSOAP(InputStream inputStream) throws Exception {XmlPullParser parser = Xml.newPullParser();parser.setInput(inputStream, "UTF-8");int event = parser.getEventType();while (event != parser.END_DOCUMENT) {switch (event) {case XmlPullParser.START_TAG:if ("getMobileCodeInfoResult".equals(parser.getName())) {return parser.nextText();}break;}event = parser.next();}return null;}private static String readSoap() throws Exception {InputStream ins = AddresService.class.getClassLoader().getResourceAsStream("soap12.xml");byte[] data = StreamTool.read(ins);return new String(data, "UTF-8");} }?4、在MainActivity中,添加按鈕執(zhí)行響應(yīng)事件,并且添加網(wǎng)絡(luò)訪問權(quán)限,將結(jié)果打印到控制臺;
總結(jié)
以上是生活随笔為你收集整理的Android 向服务器发送XML数据及调用webservice的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 您对无法重新创建的表进行了更改或者启用了
- 下一篇: python 方法