歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android 利用Soap協議查詢電話號碼歸屬地

//目錄結構

 //webservicerequest.xml

這個是內容是http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo SOPA 1.2的請求部份內容,至於那些main.xml strings.xml很簡單的自己寫就行了。

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <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">  
  3.   <soap12:Body>  
  4.     <getMobileCodeInfo xmlns="http://WebXml.com.cn/">  
  5.       <mobileCode>#phone</mobileCode>  
  6.       <userID></userID>  
  7.     </getMobileCodeInfo>  
  8.   </soap12:Body>  
  9. </soap12:Envelope>  

//響應部份主要是你通過HTTP請求過後,如果成功的話服務器端會給你發送XML響應數據。自己並通過程序解析即使獲得響應值。也就是響應部份的<>string<>這個值

//GetMobileAddressService.java 業務的Service類,主要實現SOAP 協議的電話號碼查詢

  1. package sn.len.getmbaddress.service;  
  2.   
  3. import java.io.ByteArrayOutputStream;  
  4. import java.io.InputStream;  
  5. import java.io.OutputStream;  
  6. import java.net.HttpURLConnection;  
  7. import java.net.URL;  
  8. import java.util.regex.Matcher;  
  9. import java.util.regex.Pattern;  
  10.   
  11. import org.xmlpull.v1.XmlPullParser;  
  12.   
  13. import Android.util.Log;  
  14. import android.util.Xml;  
  15.   
  16. public class GetMobileAddressService   
  17. {  
  18.     //1,向webService發送XML請求數據參數   
  19.     public static String getMobileAddress(InputStream inStream,String phone) throws Exception  
  20.     {  
  21.         //返回的是一個輸入流對象,所以要把inStream轉換成二進制數據,寫一個StreamToByte方法,以便以後使用   
  22.         byte reqeustByte[]=StreamToByte(inStream);  
  23.         //既然已經得到了xml的byte數據,則要把它變成String類型,再用正則把裡面的電話電話號碼給替換掉   
  24.         String requestXmlData=new String(reqeustByte);  
  25.         //寫一個正則方法replacePhone()去替換內容。   
  26.         String replaced=replacePhone(requestXmlData,phone);  
  27.         byte replacedByte[]=replaced.getBytes();  
  28.         Log.i("REGCONTENT", replaced);  
  29.         //建立URL鏈接,向服務器端發送內容實體數據   
  30.         URL url=new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");  
  31.         HttpURLConnection conn=(HttpURLConnection)url.openConnection();  
  32.         conn.setRequestMethod("POST");  
  33.         conn.setReadTimeout(5*1000);  
  34.         conn.setDoOutput(true);  
  35.         //設置HTTP協議的數據請求類型和數據長度   
  36.         conn.setRequestProperty("Content-Type""application/soap+xml; charset=utf-8");  
  37.         conn.setRequestProperty("Content-Length", String.valueOf(replacedByte.length));  
  38.         //把XML數據向服務器端寫入   
  39.         OutputStream outStream=conn.getOutputStream();  
  40.         outStream.write(replacedByte);  
  41.         outStream.flush();  
  42.         outStream.close();  
  43.         String address=null;  
  44.           
  45.         Log.i("CODE",conn.getResponseCode()+"");  
  46.         //如果寫入成功,服務器端會給你返回一個以XML文件保存的響應數據給你   
  47.           
  48.         if(conn.getResponseCode()==200)  
  49.         {  
  50.             InputStream responeInStream=conn.getInputStream();  
  51.             //寫一個方法parserResponseXML(),用PULL解析這個XML文檔   
  52.             address=parserResponseXML(responeInStream);  
  53.         }  
  54.         return address;  
  55.           
  56.     }  
  57.     //把流轉換成二進制數據   
  58.     public static byte[] StreamToByte(InputStream inStream) throws Exception  
  59.     {  
  60.         byte casebyte[]=new byte[1024];  
  61.         ByteArrayOutputStream byteOutStream=new ByteArrayOutputStream();  
  62.         int n=0;  
  63.         while((n=inStream.read(casebyte))!=-1)  
  64.         {  
  65.             byteOutStream.write(casebyte,0,n);  
  66.         }  
  67.         inStream.close();  
  68.         byteOutStream.close();  
  69.         return byteOutStream.toByteArray();  
  70.     }  
  71.     //接收響應的數據並解析   
  72.     public static String parserResponseXML(InputStream responseInStream) throws Exception  
  73.     {  
  74.         XmlPullParser pullParser=Xml.newPullParser();  
  75.         pullParser.setInput(responseInStream, "utf-8");  
  76.         int evenType=pullParser.getEventType();  
  77.         String responseValue=null;//響應值   
  78.         while(evenType!=XmlPullParser.END_DOCUMENT)  
  79.         {  
  80.             switch(evenType)  
  81.             {  
  82.                 case XmlPullParser.START_TAG:  
  83.                 {  
  84.                     String tag_name=pullParser.getName();  
  85.                     if("getMobileCodeInfoResult".equals(tag_name))  
  86.                     {  
  87.                         responseValue=pullParser.nextText();  
  88.                         return responseValue;  
  89.                     }  
  90.                 }break;  
  91.                 default:break;  
  92.             }  
  93.             evenType=pullParser.next(); //NND檢查了好久。。。   
  94.         }  
  95.         return null;  
  96.     }  
  97.     public static String replacePhone(String requestXmlData,String phone)  
  98.     {  
  99.         //預編譯正則表達示,也就是你想要替換的內容xml裡面的#phone   
  100.         Pattern p=Pattern.compile("\\#phone");  
  101.         //把整個XML的數據與正則匹配,並把比對後值存放在m適配器中   
  102.         Matcher m=p.matcher(requestXmlData);  
  103.         //因為第一個XML可能節點匹配找到匹配的,所以要向下尋找,繼續匹配   
  104.         if(m.find())  
  105.         {  
  106.             requestXmlData=m.replaceAll(phone);  
  107.         }  
  108.         return requestXmlData;  
  109.     }  
  110. }  
Copyright © Linux教程網 All Rights Reserved