Android中webservice的简单使用以及使用handle在UI线程和子线程中传递数据

来源:互联网 发布:昆山远洋数据招聘信息 编辑:程序博客网 时间:2024/06/05 17:29

首先是导入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;@Overrideprotected 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() {@Overridepublic void onClick(View v) {uiHandler = new Handler(){@Overridepublic 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() {@Overridepublic 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;}}

0 0
原创粉丝点击