首先是导入webservice需要用的KSOAP包 下载地址在这里:http://pan.baidu.com/s/1hq64YS8
注意ADT18.0之后 导入包必须先放在工程根目录下的libs文件夹中 如果没有libs文件夹可以先创建一个 然后将jar包复制到libs文件夹 系统会自动导入
下面是一个简单的关于天气查询的代码:
package com.app.weatherproject;
import java.io.UnsupportedEncodingException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends Activity {
//定义控件变量
private Button chaxun_button;
private Spinner spinner;
private static TextView myText;
private String cityName;
//定义一个handle变量用于在UI线程和子线程传递消息
private Handler uiHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件
myText = (TextView) findViewById(R.id.text_result);
spinner = (Spinner) findViewById(R.id.spinner_city);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.array.citys, android.R.layout.select_dialog_item);//这里的R.arrays.citys 是我在String.xml文件里写的一个xml数组
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
cityName =spinner.getSelectedItem().toString();<span style="white-space:pre"> </span>//从spinner控件中 获取用户选择的城市
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
cityName = "北京";
}
});
chaxun_button = (Button) findViewById(R.id.button_chaxun);
chaxun_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
uiHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle bundle = msg.getData();
String temp = bundle.getString("weather");
myText.setText(temp);
}
};
<span style="white-space:pre"> </span>//新建一个线程 用于获取webservice返回的数据
new Thread(new Runnable() {
@Override
public void run() {
String result=null;
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
result = getWeather(cityName);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putString("weather", result);
msg.setData(bundle);
uiHandler.sendMessage(msg);
}
}).start();
}
});
}
private static final String NAMESPACE = "http://WebXml.com.cn/";
// 你需要调用的接口网址
private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx";
<span style="white-space:pre"> </span>//该网站提供给你的方法名称(你需要哪个就定义哪个)
private static final String METHOD_NAME = "getWeatherbyCityName";
private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName";
private String weatherToday;
private SoapObject detail;
public String getWeather(String cityName) throws UnsupportedEncodingException{
try {
<span style="white-space:pre"> </span>//命名空间 和 你需要调用的接口方法名字 关于这个命名空间 我也不是很清楚是个什么东西 等以后了解更多了 再来看看
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("theCityName", cityName);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL);
ht.debug = true;
ht.call(SOAP_ACTION, envelope);
<span style="white-space:pre"> </span>//这里就是接收数据了
SoapObject result = (SoapObject) envelope.bodyIn;
<span style="white-space:pre"> </span>//处理数据
detail = (SoapObject) result.getProperty("getWeatherbyCityNameResult");
weatherToday = detail.getProperty(6).toString()+" "
+detail.getProperty(5).toString()+"\n";
weatherToday = weatherToday+detail.getProperty(10).toString()+"\n";
String temp = detail.getProperty(11).toString();
weatherToday = weatherToday+temp;
} catch (Exception e) {
e.printStackTrace();
}
<span style="white-space:pre"> </span>//返回整理后的信息
return weatherToday;
}
}