了解并使用webService
webService主要用于向其他系统提供接口以便调用,系统间可能开发语言等完全不同,根据约定的接口规范,调用者传递相关参数进行接口调用,服务方根据传入的条件进行业务处理并进行结果返回。
代码举例:
如下代码实现在http://www.gpsso.com/webservice/weather/weatherinfo.asmx网址中,调用GetToDayWeatherInfo接口的实时天气来获取北京的天气情况:
public class MainActivity extends Activity {
//要访问的webService的网址 一般以.asmx结尾
private String url=”http://www.gpsso.com/webservice/weather/weatherinfo.asmx”;
//命名空间 注意:必须要以”/”结尾 wsdl可以找到 targetNamespace
private String namespace=”http://gpsso.com/”;
//请求的方法名
private String name=”GetToDayWeatherInfo”;
//soapAction=namespace+name
private String soapAction=”http://gpsso.com/GetToDayWeatherInfo”;
private TextView tv;
private Handler myHandler=new Handler(){
public void handleMessage(android.os.Message msg) {
//显示
tv.setText(msg.obj.toString());
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
}
public void getweather(View v){
//新开启一个子线程,去访问网络
new Thread(){
public void run() {
getWeatherData();
};
}.start();
}
private void getWeatherData() {
//创建一个SoapObject对象
SoapObject obj=new SoapObject(namespace, name);
//传递三个参数信息
obj.addProperty("APICode", "11709251728002768683");
obj.addProperty("APIKey", "1F1FB4C41BDA4E3EB2E75D2A11BB55");
obj.addProperty("CityCode", "101010100");//北京
//1.创建 httpTran...对象
HttpTransportSE hts=new HttpTransportSE(url);
//2.创建Soap..Evenlope对象 确定soap协议的版本号 v10 v11 v12
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapSerializationEnvelope.VER11);
//3.设置传送给服务器的参数
envelope.bodyOut=obj;
//4.设置支付语言
envelope.dotNet=true;
try {
//5.进行请求与访问
hts.call(soapAction, envelope);
//6.得到响应的结果
SoapObject result=(SoapObject)envelope.bodyIn;
//解析到GetToDayWeatherInfoResult
SoapObject weatherInfoResult=(SoapObject)result.getProperty("GetToDayWeatherInfoResult");
//解析得到API对象
SoapObject apiObj=(SoapObject)weatherInfoResult.getProperty("API");
String city=apiObj.getProperty("CITY").toString();
String wd=apiObj.getProperty("WD").toString();
String ws=apiObj.getProperty("WS").toString();
String SD=apiObj.getProperty("SD").toString();
//显示的信息
String showText=city+"的实时天气情况是:"+"风力 "+wd+" "+ws+" 相对湿度:"+SD;
Log.d("zzz", showText);
Log.d("zzz", result.toString());
//发消息给主线程,通知tv组件改变其内容
Message msg=Message.obtain();
msg.obj=showText;
myHandler.sendMessage(msg);
/**
*
* GetToDayWeatherInfoResponse{GetToDayWeatherInfoResult=anyType{API=anyType{RESULTS=0; MESSAGE=接口查询成功; CITY=北京; CITYID=101010100; TEMP=18; WD=东南风; WS=1级; SD=17%; WSE=1; TIME=17:05; ISRADAR=1;RADAR=JC_RADAR_AZ9010_JB; NJD=暂无实况; QY=1011; RAIN=0; }; }; }
*/
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}