package com.example.weatherdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tvContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btnWeather).setOnClickListener(this);
tvContent = (TextView) findViewById(R.id.tvContent);
}
/**
* 获取天气
*/
private void getWeather() throws Exception{
//saop协议 基于http
String service_url = "http://ws.webxml.com.cn/WebServices/WeatherWS.asmx";
//namepace
String name_space = "http://WebXml.com.cn/";
//具体请求的服务
String method_name = "getWeather";
//创建信封 文件的路径
HttpTransportSE httpTransportSE = new HttpTransportSE(service_url);
//顺丰、圆通
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
//参数1: namespace
//参数2 : 具体的服务名字
SoapObject soapObject = new SoapObject(name_space,method_name);
//key/value
//设置请求参数
soapObject.addProperty("theCityCode","北京");
soapObject.addProperty("theUserID","5071be049c5241ad8583050460fc1fac");
//添加到信封
envelope.bodyOut = soapObject;
//设置跨语言的兼容性
envelope.dotNet = true;
//连接服务器并发送请求
//soapAction
httpTransportSE.call(name_space + method_name,envelope);
//服务器响应
if(envelope.getResponse() != null){//判断响应消息不为空,如果为空就没有请求成功
// SoapObject result = (SoapObject) envelope.getResponse();
SoapObject result = (SoapObject) envelope.bodyIn;
//得到属性集的数量
//int count = result.getPropertyCount();
SoapObject subSoapObj = (SoapObject) result.getProperty("getWeatherResult");
System.out.println("属性 : "+subSoapObj.getPropertyCount());
for (int i = 0; i < subSoapObj.getPropertyCount(); i++) {
//注意 key-value 看作是一个soapprimitive类型
SoapPrimitive childResult = (SoapPrimitive) subSoapObj.getProperty(i);
System.out.println("值 : "+childResult);
}
//解析数据
// System.out.println("结果 : "+result);
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnWeather:
{
//子线程
new Thread(){
@Override
public void run() {
super.run();
try {
getWeather();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
break;
}
}
}