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

首先是导入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;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值