Android WebService(基于SOAP協(xié)議)

package com.nenglong.wsclient;  
  
import java.io.IOException;  
  
import org.ksoap2.SoapEnvelope;  
import org.ksoap2.serialization.SoapObject;  
import org.ksoap2.serialization.SoapSerializationEnvelope;  
import org.ksoap2.transport.HttpTransportSE;  
import org.xmlpull.v1.XmlPullParserException;  
  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Looper;  
import android.os.Message;  
import android.os.StrictMode;  
import android.app.Activity;  
import android.view.Menu;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.TextView;  
  
/** 
 * @author huanglong Android 平臺(tái)調(diào)用WebService(手機(jī)號(hào)碼歸屬地查詢) 
 */  
public class MainActivity extends Activity {  
private TextView tv_result;  
private EditText et_phone;  
private Button btn_query;  
  
@Override  
public void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
setContentView(R.layout.activity_main);  
initView();  
}  
  
private void initView() {  
tv_result = (TextView) findViewById(R.id.result_text);  
et_phone = (EditText) findViewById(R.id.et);  
btn_query = (Button) findViewById(R.id.btn_query);  
btn_query.setOnClickListener(new OnClickListener() {  
  
@Override  
public void onClick(View v) {  
// TODO Auto-generated method stub  
String phone = et_phone.getText().toString().trim();  
if ("".equals(phone) || phone.length() < 7) {  
et_phone.setText("您輸入的手機(jī)號(hào)碼有誤");  
et_phone.requestFocus();  
tv_result.setText("");  
return;  
}  
getRemoteInfo(phone);  
}  
});  
}  
  
/** 
 * 查詢號(hào)碼段歸屬地的方法 
 *  
 * @param phone 
 *手機(jī)號(hào)碼段 
 */  
public void getRemoteInfo(final String phone) {  
new Thread(new Runnable() {  
  
@Override  
public void run() {  
// TODO Auto-generated method stub  
// 命名空間  
String nameSpace = "http://WebXml.com.cn/";  
// 調(diào)用方法的名稱  
String methodName = "getMobileCodeInfo";  
// EndPoint  
String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";  
// SOAP Action  
String soapAction = "http://WebXml.com.cn/getMobileCodeInfo";  
// 指定WebService的命名空間和調(diào)用方法  
SoapObject soapObject = new SoapObject(nameSpace, methodName);  
// 設(shè)置需要調(diào)用WebService接口的兩個(gè)參數(shù)mobileCode UserId  
soapObject.addProperty("mobileCode", phone);  
soapObject.addProperty("userId", "");  
// 生成調(diào)用WebService方法調(diào)用的soap信息搏予,并且指定Soap版本  
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(  
SoapEnvelope.VER10);  
envelope.bodyOut = soapObject;  
// 是否調(diào)用DotNet開發(fā)的WebService  
envelope.dotNet = true;  
envelope.setOutputSoapObject(soapObject);  
HttpTransportSE transport = new HttpTransportSE(endPoint);  
try {  
transport.call(soapAction, envelope);  
} catch (IOException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
} catch (XmlPullParserException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
}  
// 獲取返回的數(shù)據(jù)  
SoapObject object = (SoapObject) envelope.bodyIn;  
// 獲取返回的結(jié)果  
String result = object.getProperty(0).toString();  
Message message = handler.obtainMessage();  
message.obj = result;  
handler.sendMessage(message);  
}  
}).start();  
}  
private Handler handler = new Handler(){  
public void handleMessage(android.os.Message msg) {  
// 將WebService得到的結(jié)果返回給TextView  
tv_result.setText(msg.obj.toString());  
};  
};  
}  

webService:基于SOAP協(xié)議的遠(yuǎn)程調(diào)用標(biāo)準(zhǔn),通過webService可以將不用的操作系統(tǒng)平臺(tái)且警,不同的計(jì)算機(jī)語言粉捻,不同的技術(shù)整合到一起。
調(diào)用webService需要導(dǎo)入jar包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包,這個(gè)包在網(wǎng)上可以下載斑芜,至于導(dǎo)入的方法 肩刃,右鍵項(xiàng)目,選擇最后一項(xiàng)properties-->Java build path-->Libraies-->Add external Jars 選擇相應(yīng)的路徑下的jar文件就OK了杏头,然后記得在Order and Export 里面將選擇的jar文件勾選上盈包。
調(diào)用webService的步驟分為7個(gè):

  1. 實(shí)例化soapObject對(duì)象,指定Soap的命名空間(從相關(guān)文檔中可以查看WSDL命名空間以及調(diào)用方法)
View Code   
  
//命名空間  
private static final String serviceNameSpace="http://WebXml.com.cn/";  
//調(diào)用方法(獲得支持的城市)  
private static final String getSupportCity="getSupportCity";  
  
//實(shí)例化SoapObject對(duì)象  
SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);  

2.假設(shè)方法有參數(shù)的話,添加調(diào)用的方法的參數(shù)

//獲得序列化的Envelope  
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);  
envelope.bodyOut=request;  

request.addProperties("參數(shù)名稱","參數(shù)值");
3.設(shè)置SOAP請(qǐng)求信息(參數(shù)部分為SOAP版本號(hào),與自己要調(diào)用的SOAP版本必須一致醇王,也就是你導(dǎo)入到工程中的jar相對(duì)應(yīng)的版本)

//獲得序列化的Envelope  
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);  
envelope.bodyOut=request;  

4.注冊(cè)Enelope
(new MarshalBase64()).register(envelope);
5.構(gòu)建傳輸對(duì)象,并指定WDSL文檔中的URL

//請(qǐng)求URL  
private static final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";  
//Android傳輸對(duì)象  
AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);  
transport.debug=true;  

6.調(diào)用webService(其中參數(shù)為1:命名空間+方法名稱,envelope對(duì)象);

transport.call(serviceNameSpace+getWeatherbyCityName, envelope);  

7.解析返回?cái)?shù)據(jù):

if(envelope.getResponse()!=null){  
return parse(envelope.bodyIn.toString());  
}  
  
/************** 
 * 解析XML 
 * @param str 
 * @return 
 */  
private static List<String> parse(String str){  
String temp;  
List<String> list=new ArrayList<String>();  
if(str!=null && str.length()>0){  
int start=str.indexOf("string");  
int end=str.lastIndexOf(";");  
temp=str.substring(start, end-3);  
String []test=temp.split(";");  
  
 for(int i=0;i<test.length;i++){  
 if(i==0){  
 temp=test[i].substring(7);  
 }else{  
 temp=test[i].substring(8);  
 }  
 int index=temp.indexOf(",");  
 list.add(temp.substring(0, index));  
 }  
}  
return list;  
}  

這樣就成功了,這里有個(gè)地址是提供Webservice天氣預(yù)報(bào)服務(wù)的,我們這里只提供了獲取城市列表:

//命名空間  
private static final String serviceNameSpace="http://WebXml.com.cn/";  
//請(qǐng)求URL  
private static final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";  
//調(diào)用方法(獲得支持的城市)  
private static final String getSupportCity="getSupportCity";  
//調(diào)用城市的方法(需要帶參數(shù))  
private static final String getWeatherbyCityName="getWeatherbyCityName";  
//調(diào)用省或者直轄市的方法(獲得支持的省份或直轄市)  
private static final String getSupportProvince="getSupportProvince";  

在瀏覽器中輸入WSDL serverUrl 就可以看到一些可供調(diào)用的方法:
我們選擇國(guó)內(nèi)外主要城市或者省份的調(diào)用方法:getSurpportPrivence()呢燥,然后調(diào)用之后你會(huì)發(fā)現(xiàn)返回給我們的是XML文檔:

<?xml version="1.0" encoding="utf-8" ?>   
- <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">  
  <string>直轄市</string>   
  <string>特別行政區(qū)</string>   
  <string>黑龍江</string>   
  <string>吉林</string>   
  <string>遼寧</string>   
  <string>內(nèi)蒙古</string>   
  <string>河北</string>   
  <string>河南</string>   
  <string>山東</string>   
  <string>山西</string>   
  <string>江蘇</string>   
  <string>安徽</string>   
  <string>陜西</string>   
  <string>寧夏</string>   
  <string>甘肅</string>   
  <string>青海</string>   
  <string>湖北</string>   
  <string>湖南</string>   
  <string>浙江</string>   
  <string>江西</string>   
  <string>福建</string>   
  <string>貴州</string>   
  <string>四川</string>   
  <string>廣東</string>   
  <string>廣西</string>   
  <string>云南</string>   
  <string>海南</string>   
  <string>新疆</string>   
  <string>西藏</string>   
  <string>臺(tái)灣</string>   
  <string>亞洲</string>   
  <string>歐洲</string>   
  <string>非洲</string>   
  <string>北美洲</string>   
  <string>南美洲</string>   
  <string>大洋洲</string>   
  </ArrayOfString>  

class:

public class WebServiceHelper {  
 
//WSDL文檔中的命名空間  
private static final String targetNameSpace="http://WebXml.com.cn/";  
//WSDL文檔中的URL  
private static final String WSDL="http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";  
 
//需要調(diào)用的方法名(獲得本天氣預(yù)報(bào)Web Services支持的洲、國(guó)內(nèi)外省份和城市信息)  
private static final String getSupportProvince="getSupportProvince";  
//需要調(diào)用的方法名(獲得本天氣預(yù)報(bào)Web Services支持的城市信息,根據(jù)省份查詢城市集合:帶參數(shù))  
private static final String getSupportCity="getSupportCity";  
//根據(jù)城市或地區(qū)名稱查詢獲得未來三天內(nèi)天氣情況厦画、現(xiàn)在的天氣實(shí)況疮茄、天氣和生活指數(shù)  
private static final String getWeatherbyCityName="getWeatherbyCityName";  
  
  
/******** 
 * 獲得州,國(guó)內(nèi)外省份和城市信息 
 * @return 
 */  
public  List<String> getProvince(){  
List<String> provinces=new ArrayList<String>();  
String str="";  
SoapObject soapObject=new SoapObject(targetNameSpace,getSupportProvince);  
//request.addProperty("參數(shù)", "參數(shù)值");調(diào)用的方法參數(shù)與參數(shù)值(根據(jù)具體需要可選可不選)  
  
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);  
envelope.dotNet=true;  
envelope.setOutputSoapObject(soapObject);//envelope.bodyOut=request;  
  
  
AndroidHttpTransport httpTranstation=new AndroidHttpTransport(WSDL);  
//或者HttpTransportSE httpTranstation=new HttpTransportSE(WSDL);  
try {  
  
httpTranstation.call(targetNameSpace+getSupportProvince, envelope);  
SoapObject result=(SoapObject)envelope.getResponse();  
//下面對(duì)結(jié)果進(jìn)行解析根暑,結(jié)構(gòu)類似json對(duì)象  
//str=(String) result.getProperty(6).toString();  
  
int count=result.getPropertyCount();  
for(int index=0;index<count;index++){  
provinces.add(result.getProperty(index).toString());  
}  
  
} catch (IOException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
} catch (XmlPullParserException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
}   
return provinces;  
}  
  
/********** 
 * 根據(jù)省份或者直轄市獲取天氣預(yù)報(bào)所支持的城市集合 
 * @param province 
 * @return 
 */  
public  List<String> getCitys(String province){  
List<String> citys=new ArrayList<String>();  
SoapObject soapObject=new SoapObject(targetNameSpace,getSupportCity);  
soapObject.addProperty("byProvinceName", province);  
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);  
envelope.dotNet=true;  
envelope.setOutputSoapObject(soapObject);  
  
AndroidHttpTransport httpTransport=new AndroidHttpTransport(WSDL);  
try {  
httpTransport.call(targetNameSpace+getSupportCity, envelope);  
SoapObject result=(SoapObject)envelope.getResponse();  
int count=result.getPropertyCount();  
for(int index=0;index<count;index++){  
citys.add(result.getProperty(index).toString());  
}  
  
} catch (IOException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
} catch (XmlPullParserException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
}   
return citys;  
}  
  
/*************************** 
 * 根據(jù)城市信息獲取天氣預(yù)報(bào)信息 
 * @param city 
 * @return 
 ***************************/  
public  WeatherBean getWeatherByCity(String city){  
  
WeatherBean bean=new WeatherBean();  
  
SoapObject soapObject=new SoapObject(targetNameSpace,getWeatherbyCityName);  
soapObject.addProperty("theCityName",city);//調(diào)用的方法參數(shù)與參數(shù)值(根據(jù)具體需要可選可不選)  
  
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);  
envelope.dotNet=true;  
envelope.setOutputSoapObject(soapObject);//envelope.bodyOut=request;  
  
  
AndroidHttpTransport httpTranstation=new AndroidHttpTransport(WSDL);  
//或者HttpTransportSE httpTranstation=new HttpTransportSE(WSDL);  
try {  
httpTranstation.call(targetNameSpace+getWeatherbyCityName, envelope);  
SoapObject result=(SoapObject)envelope.getResponse();  
//下面對(duì)結(jié)果進(jìn)行解析力试,結(jié)構(gòu)類似json對(duì)象  
bean=parserWeather(result);  
   
} catch (IOException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
} catch (XmlPullParserException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
}   
return bean;  
}  
  
/** 
 * 解析返回的結(jié)果 
 * @param soapObject 
 */  
protected   WeatherBean parserWeather(SoapObject soapObject){  
WeatherBean bean=new WeatherBean();  
  
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();  
  
  
Map<String,Object> map=new HashMap<String,Object>();  
  
//城市名  
bean.setCityName(soapObject.getProperty(1).toString());  
//城市簡(jiǎn)介  
bean.setCityDescription(soapObject.getProperty(soapObject.getPropertyCount()-1).toString());  
//天氣實(shí)況+建議  
bean.setLiveWeather(soapObject.getProperty(10).toString()+"\n"+soapObject.getProperty(11).toString());  
  
//其他數(shù)據(jù)  
//日期,  
String date=soapObject.getProperty(6).toString();  
//---------------------------------------------------  
String weatherToday="今天:" + date.split(" ")[0];
weatherToday+="\n天氣:"+ date.split(" ")[1];   
weatherToday+="\n氣溫:"+soapObject.getProperty(5).toString();  
weatherToday+="\n風(fēng)力:"+soapObject.getProperty(7).toString();  
weatherToday+="\n";  
  
List<Integer> icons=new ArrayList<Integer>();  
  
icons.add(parseIcon(soapObject.getProperty(8).toString()));
icons.add(parseIcon(soapObject.getProperty(9).toString()));  
   
map.put("weatherDay", weatherToday);  
map.put("icons",icons);  
list.add(map);  
  
  
  
  
//-------------------------------------------------  
map=new HashMap<String,Object>();   
date=soapObject.getProperty(13).toString();  
String weatherTomorrow="明天:" + date.split(" ")[0];
weatherTomorrow+="\n天氣:"+ date.split(" ")[1];   
weatherTomorrow+="\n氣溫:"+soapObject.getProperty(12).toString();  
weatherTomorrow+="\n風(fēng)力:"+soapObject.getProperty(14).toString();  
weatherTomorrow+="\n";  
  
icons=new ArrayList<Integer>();  
   
icons.add(parseIcon(soapObject.getProperty(15).toString()));
icons.add(parseIcon(soapObject.getProperty(16).toString()));  
  
map.put("weatherDay", weatherTomorrow);  
map.put("icons",icons);  
list.add(map);  
//--------------------------------------------------------------  
map=new HashMap<String,Object>();   
  
date=soapObject.getProperty(18).toString();  
String weatherAfterTomorrow="后天:" + date.split(" ")[0];
weatherAfterTomorrow+="\n天氣:"+ date.split(" ")[1];   
weatherAfterTomorrow+="\n氣溫:"+soapObject.getProperty(17).toString();  
weatherAfterTomorrow+="\n風(fēng)力:"+soapObject.getProperty(19).toString();  
weatherAfterTomorrow+="\n";  
  
icons=new ArrayList<Integer>();  
icons.add(parseIcon(soapObject.getProperty(20).toString()));
icons.add(parseIcon(soapObject.getProperty(21).toString()));  
  
map.put("weatherDay", weatherAfterTomorrow);  
map.put("icons",icons);  
list.add(map);   
//--------------------------------------------------------------  
  
bean.setList(list);  
return bean;  
}  
  
 //解析圖標(biāo)字符串  
 private int parseIcon(String data){  
// 0.gif排嫌,返回名稱0,  
 int resID=32;  
 String result=data.substring(0, data.length()-4).trim();  
  // String []icon=data.split(".");  
  // String result=icon[0].trim();  
  //   Log.e("this is the icon", result.trim());  

   if(!result.equals("nothing")){  
   resID=Integer.parseInt(result.trim());  
   }  
 return resID;  
 //return ("a_"+data).split(".")[0];   
 }   
}  

以及幫助類:

public class WebServiceUtil {  
 
//命名空間  
private static final String serviceNameSpace="http://WebXml.com.cn/";  
//請(qǐng)求URL  
private static final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";  
//調(diào)用方法(獲得支持的城市)  
private static final String getSupportCity="getSupportCity";  
//調(diào)用城市的方法(需要帶參數(shù))  
private static final String getWeatherbyCityName="getWeatherbyCityName";  
//調(diào)用省或者直轄市的方法(獲得支持的省份或直轄市)  
private static final String getSupportProvince="getSupportProvince";  
   
/************* 
 * @return城市列表 
 *************/  
public static List<String> getCityList(){  
//實(shí)例化SoapObject對(duì)象  
SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);  
//獲得序列化的Envelope  
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);  
envelope.bodyOut=request;  
(new MarshalBase64()).register(envelope);  
//Android傳輸對(duì)象  
AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);  
transport.debug=true;  
  
//調(diào)用  
try {  
transport.call(serviceNameSpace+getWeatherbyCityName, envelope);  
if(envelope.getResponse()!=null){  
return parse(envelope.bodyIn.toString());  
}  
  
} catch (IOException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
} catch (XmlPullParserException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
}  
  
  
return null;  
}  
  
  
public static List<String> getProviceList(){  
//實(shí)例化SoapObject對(duì)象  
SoapObject request=new SoapObject(serviceNameSpace, getSupportProvince);  
//獲得序列化的Envelope  
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);  
envelope.bodyOut=request;  
(new MarshalBase64()).register(envelope);  
//Android傳輸對(duì)象  
AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);  
transport.debug=true;  
  
//調(diào)用  
try {  
transport.call(serviceNameSpace+getWeatherbyCityName, envelope);  
if(envelope.getResponse()!=null){  
return null;  
}  
  
} catch (IOException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
} catch (XmlPullParserException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
}  
  
  
return null;  
}   
  
/************* 
 * @param cityName 
 * @return 
 *************/  
public static String getWeather(String cityName){  
   
return "";  
}  
  
/************** 
 * 解析XML 
 * @param str 
 * @return 
 */  
private static List<String> parse(String str){  
String temp;  
List<String> list=new ArrayList<String>();  
if(str!=null && str.length()>0){  
int start=str.indexOf("string");  
int end=str.lastIndexOf(";");  
temp=str.substring(start, end-3);  
String []test=temp.split(";");  
  
 for(int i=0;i<test.length;i++){  
 if(i==0){  
 temp=test[i].substring(7);  
 }else{  
 temp=test[i].substring(8);  
 }  
 int index=temp.indexOf(",");  
 list.add(temp.substring(0, index));  
 }  
}  
return list;  
}  
  
 /********* 
  * 獲取天氣 
  * @param soapObject 
  */  
 private void parseWeather(SoapObject soapObject){  
 //String date=soapObject.getProperty(6);  
 }   
}  

以上就是顯示天氣預(yù)報(bào)的全部代碼
轉(zhuǎn)載自:http://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html
還可以調(diào)用免費(fèi)的WebService顯示手機(jī)號(hào)碼的歸屬地畸裳,但是每天免費(fèi)的次數(shù)是有限的,同樣是調(diào)用WebService
但是調(diào)用WebService的時(shí)候淳地,因?yàn)槭蔷W(wǎng)絡(luò)操作怖糊,在Android 4.0.3以上的版本貌似會(huì)出現(xiàn)異常帅容,后經(jīng)過google發(fā)現(xiàn)是在
新版的Android系統(tǒng)里面,因?yàn)閷?duì)網(wǎng)絡(luò)的訪問限制的更加嚴(yán)格,所以會(huì)報(bào)NetWorkOnMainThreadException 說的是對(duì)
于網(wǎng)絡(luò)的訪問不能放在主線程,這樣的解決方案有兩種伍伤,一種是開辟新的現(xiàn)成訪問網(wǎng)絡(luò)并徘,call webService放在子線程中運(yùn)行
還有一個(gè)解決方案是使用StricMode進(jìn)行優(yōu)化,strictMode有很多不同的策略進(jìn)行優(yōu)化扰魂,當(dāng)開發(fā)者違背某個(gè)規(guī)則的時(shí)候麦乞,每個(gè)策略都
有不用的方法去提示用戶。
顯示號(hào)碼歸屬地的代碼:

package com.nenglong.wsclient;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.StrictMode;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/**
 * @author huanglong Android 平臺(tái)調(diào)用WebService(手機(jī)號(hào)碼歸屬地查詢)
 */
public class MainActivity extends Activity {
    private TextView tv_result;
    private EditText et_phone;
    private Button btn_query;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        tv_result = (TextView) findViewById(R.id.result_text);
        et_phone = (EditText) findViewById(R.id.et);
        btn_query = (Button) findViewById(R.id.btn_query);
        btn_query.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String phone = et_phone.getText().toString().trim();
                if ("".equals(phone) || phone.length() < 7) {
                    et_phone.setText("您輸入的手機(jī)號(hào)碼有誤");
                    et_phone.requestFocus();
                    tv_result.setText("");
                    return;
                }
                getRemoteInfo(phone);
            }
        });
    }

    /**
     * 查詢號(hào)碼段歸屬地的方法
     * 
     * @param phone
     *手機(jī)號(hào)碼段
     */
    public void getRemoteInfo(final String phone) {
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                // 命名空間
                String nameSpace = "http://WebXml.com.cn/";
                // 調(diào)用方法的名稱
                String methodName = "getMobileCodeInfo";
                // EndPoint
                String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";
                // SOAP Action
                String soapAction = "http://WebXml.com.cn/getMobileCodeInfo";
                // 指定WebService的命名空間和調(diào)用方法
                SoapObject soapObject = new SoapObject(nameSpace, methodName);
                // 設(shè)置需要調(diào)用WebService接口的兩個(gè)參數(shù)mobileCode UserId
                soapObject.addProperty("mobileCode", phone);
                soapObject.addProperty("userId", "");
                // 生成調(diào)用WebService方法調(diào)用的soap信息劝评,并且指定Soap版本
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER10);
                envelope.bodyOut = soapObject;
                // 是否調(diào)用DotNet開發(fā)的WebService
                envelope.dotNet = true;
                envelope.setOutputSoapObject(soapObject);
                HttpTransportSE transport = new HttpTransportSE(endPoint);
                try {
                    transport.call(soapAction, envelope);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (XmlPullParserException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                // 獲取返回的數(shù)據(jù)
                SoapObject object = (SoapObject) envelope.bodyIn;
                // 獲取返回的結(jié)果
                String result = object.getProperty(0).toString();
                Message message = handler.obtainMessage();
                message.obj = result;
                handler.sendMessage(message);
            }
        }).start();
    }
    private Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            // 將WebService得到的結(jié)果返回給TextView
            tv_result.setText(msg.obj.toString());
        };
    };
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末姐直,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蒋畜,更是在濱河造成了極大的恐慌声畏,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姻成,死亡現(xiàn)場(chǎng)離奇詭異插龄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)科展,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門辫狼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辛润,你說我怎么就攤上這事〖樱” “怎么了砂竖?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鹃答。 經(jīng)常有香客問我乎澄,道長(zhǎng),這世上最難降的妖魔是什么测摔? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任置济,我火速辦了婚禮,結(jié)果婚禮上锋八,老公的妹妹穿的比我還像新娘浙于。我一直安慰自己,他們只是感情好挟纱,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布羞酗。 她就那樣靜靜地躺著,像睡著了一般紊服。 火紅的嫁衣襯著肌膚如雪檀轨。 梳的紋絲不亂的頭發(fā)上胸竞,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音参萄,去河邊找鬼卫枝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛讹挎,可吹牛的內(nèi)容都是我干的校赤。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼淤袜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼痒谴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铡羡,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤积蔚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后烦周,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尽爆,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年读慎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漱贱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夭委,死狀恐怖幅狮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情株灸,我是刑警寧澤崇摄,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站慌烧,受9級(jí)特大地震影響逐抑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屹蚊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一厕氨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汹粤,春花似錦命斧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春胃惜,著一層夾襖步出監(jiān)牢的瞬間泞莉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工船殉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鲫趁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓利虫,卻偏偏與公主長(zhǎng)得像挨厚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糠惫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 一疫剃、Java基礎(chǔ) 1.寫出下面代碼的執(zhí)行結(jié)果 2.寫出下面代碼的執(zhí)行結(jié)果 3.寫出下面代碼的執(zhí)行結(jié)果 (此題需寫出...
    joshul閱讀 517評(píng)論 0 1
  • Web Services(Web服務(wù))是一個(gè)用于支持網(wǎng)絡(luò)間不同機(jī)器互操作的軟件系統(tǒng),它是一種自包含硼讽、自描述和模塊化...
    哇樓主閱讀 886評(píng)論 0 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理巢价,服務(wù)發(fā)現(xiàn),斷路器固阁,智...
    卡卡羅2017閱讀 134,715評(píng)論 18 139
  • 工作中經(jīng)常會(huì)遇到需要讀取遠(yuǎn)程服務(wù)器的數(shù)據(jù)壤躲,目前流行的是有兩種方法: 1.通過json數(shù)組形式返回給客戶端 2.服務(wù)...
    窗外花絮閱讀 1,897評(píng)論 0 49
  • 文/程序員男神 前言 最近接手新的任務(wù),開發(fā)公司的移動(dòng)新產(chǎn)品备燃,想到自己一個(gè)人開發(fā)碉克,蛋感覺瞬間很疼啊并齐!接手到項(xiàng)目才發(fā)...
    程序猿男神閱讀 4,309評(píng)論 1 11