用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

ETmanwenhan    -  云代码空间

—— 任何人只要专注于一个领域,5年可以成为专家,10年可以成为权威,15年就可以世界顶尖。2013.3.1

MyWeather 全部代码

2013-04-20|1653阅||

摘要:利用import org.ksoap2.*; 来获取天气预报!


package org.crazyit.net;

import java.util.List;

import org.crazyit.net.R;
import org.ksoap2.serialization.SoapObject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;

/**
 * Description:
 * <br/>site: <a href="http://www.crazyit.org">crazyit.org</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class MyWeather extends Activity
{
	private Spinner provinceSpinner;
	private Spinner citySpinner;
	private ImageView todayWhIcon1;
	private ImageView todayWhIcon2;
	private TextView textWeatherToday;
	private ImageView tomorrowWhIcon1;
	private ImageView tomorrowWhIcon2;
	private TextView textWeatherTomorrow;
	private ImageView afterdayWhIcon1;
	private ImageView afterdayWhIcon2;
	private TextView textWeatherAfterday;
	private TextView textWeatherCurrent;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		todayWhIcon1 = (ImageView) findViewById(R.id.todayWhIcon1);
		todayWhIcon2 = (ImageView) findViewById(R.id.todayWhIcon2);
		textWeatherToday = (TextView) findViewById(R.id.weatherToday);
		tomorrowWhIcon1 = (ImageView) findViewById(R.id.tomorrowWhIcon1);
		tomorrowWhIcon2 = (ImageView) findViewById(R.id.tomorrowWhIcon2);
		textWeatherTomorrow = (TextView) findViewById(R.id.weatherTomorrow);
		afterdayWhIcon1 = (ImageView) findViewById(R.id.afterdayWhIcon1);
		afterdayWhIcon2 = (ImageView) findViewById(R.id.afterdayWhIcon2);
		textWeatherAfterday = (TextView) findViewById(R.id.weatherAfterday);
		textWeatherCurrent = (TextView) findViewById(R.id.weatherCurrent);

		// 获取程序界面中选择省份、城市的Spinner组件
		provinceSpinner = (Spinner) findViewById(R.id.province);
		citySpinner = (Spinner) findViewById(R.id.city);
		// 调用远程Web Service获取省份列表
		List<String> provinces = WebServiceUtil.getProvinceList();
		ListAdapter adapter = new ListAdapter(this, provinces);
		// 使用Spinner显示省份列表
		provinceSpinner.setAdapter(adapter);
		// 当省份Spinner的选择项被改变时
		provinceSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
		{
			@Override
			public void onItemSelected(AdapterView<?> source, View parent,
				int position, long id)
			{
				List<String> cities = WebServiceUtil
					.getCityListByProvince(provinceSpinner.getSelectedItem()
						.toString());
				ListAdapter cityAdapter = new ListAdapter(MyWeather.this,
					cities);
				// 使用Spinner显示城市列表
				citySpinner.setAdapter(cityAdapter);
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0)
			{
			}
		});
		// 当城市Spinner的选择项被改变时
		citySpinner.setOnItemSelectedListener(new OnItemSelectedListener()
		{
			@Override
			public void onItemSelected(AdapterView<?> source, View parent,
				int position, long id)
			{
				showWeather(citySpinner.getSelectedItem().toString());
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0)
			{
			}
		});
	}

	private void showWeather(String city)
	{
		String weatherToday = null;
		String weatherTomorrow = null;
		String weatherAfterday = null;
		String weatherCurrent = null;
		int iconToday[] = new int[2];
		int iconTomorrow[] = new int[2];
		int iconAfterday[] = new int[2];
		// 获取远程Web Service返回的对象
		SoapObject detail = WebServiceUtil.getWeatherByCity(city);
		// 获取天气实况
		
		weatherCurrent = detail.getProperty(4).toString();
		
		// 解析今天的天气情况
		String date = detail.getProperty(7).toString();
		weatherToday = "今天:" + date.split(" ")[0];
		weatherToday = weatherToday + "\n天气:" + date.split(" ")[1];
		weatherToday = weatherToday + "\n气温:"
			+ detail.getProperty(8).toString();
		weatherToday = weatherToday + "\n风力:"
			+ detail.getProperty(9).toString() + "\n";
		iconToday[0] = parseIcon(detail.getProperty(10).toString());
		iconToday[1] = parseIcon(detail.getProperty(11).toString());
		// 解析明天的天气情况
		date = detail.getProperty(12).toString();
		weatherTomorrow = "明天:" + date.split(" ")[0];
		weatherTomorrow = weatherTomorrow + "\n天气:" + date.split(" ")[1];
		weatherTomorrow = weatherTomorrow + "\n气温:"
			+ detail.getProperty(13).toString();
		weatherTomorrow = weatherTomorrow + "\n风力:"
			+ detail.getProperty(14).toString() + "\n";
		iconTomorrow[0] = parseIcon(detail.getProperty(15).toString());
		iconTomorrow[1] = parseIcon(detail.getProperty(16).toString());
		// 解析后天的天气情况
		date = detail.getProperty(17).toString();
		weatherAfterday = "后天:" + date.split(" ")[0];
		weatherAfterday = weatherAfterday + "\n天气:" + date.split(" ")[1];
		weatherAfterday = weatherAfterday + "\n气温:"
			+ detail.getProperty(18).toString();
		weatherAfterday = weatherAfterday + "\n风力:"
			+ detail.getProperty(19).toString() + "\n";
		iconAfterday[0] = parseIcon(detail.getProperty(20).toString());
		iconAfterday[1] = parseIcon(detail.getProperty(21).toString());
		// 更新当天的天气实况
		textWeatherCurrent.setText(weatherCurrent);
		// 更新显示今天天气的图标和文本框
		textWeatherToday.setText(weatherToday);
		todayWhIcon1.setImageResource(iconToday[0]);
		todayWhIcon2.setImageResource(iconToday[1]);
		// 更新显示明天天气的图标和文本框
		textWeatherTomorrow.setText(weatherTomorrow);
		tomorrowWhIcon1.setImageResource(iconTomorrow[0]);
		tomorrowWhIcon2.setImageResource(iconTomorrow[1]);
		// 更新显示后天天气的图标和文本框
		textWeatherAfterday.setText(weatherAfterday);
		afterdayWhIcon1.setImageResource(iconAfterday[0]);
		afterdayWhIcon2.setImageResource(iconAfterday[1]);
	}

	// 工具方法,该方法负责把返回的天气图标字符串,转换为程序的图片资源ID。
	private int parseIcon(String strIcon)
	{
		if (strIcon == null)
			return -1;
		if ("0.gif".equals(strIcon))
			return R.drawable.a_0;
		if ("1.gif".equals(strIcon))
			return R.drawable.a_1;
		if ("2.gif".equals(strIcon))
			return R.drawable.a_2;
		if ("3.gif".equals(strIcon))
			return R.drawable.a_3;
		if ("4.gif".equals(strIcon))
			return R.drawable.a_4;
		if ("5.gif".equals(strIcon))
			return R.drawable.a_5;
		if ("6.gif".equals(strIcon))
			return R.drawable.a_6;
		if ("7.gif".equals(strIcon))
			return R.drawable.a_7;
		if ("8.gif".equals(strIcon))
			return R.drawable.a_8;
		if ("9.gif".equals(strIcon))
			return R.drawable.a_9;
		if ("10.gif".equals(strIcon))
			return R.drawable.a_10;
		if ("11.gif".equals(strIcon))
			return R.drawable.a_11;
		if ("12.gif".equals(strIcon))
			return R.drawable.a_12;
		if ("13.gif".equals(strIcon))
			return R.drawable.a_13;
		if ("14.gif".equals(strIcon))
			return R.drawable.a_14;
		if ("15.gif".equals(strIcon))
			return R.drawable.a_15;
		if ("16.gif".equals(strIcon))
			return R.drawable.a_16;
		if ("17.gif".equals(strIcon))
			return R.drawable.a_17;
		if ("18.gif".equals(strIcon))
			return R.drawable.a_18;
		if ("19.gif".equals(strIcon))
			return R.drawable.a_19;
		if ("20.gif".equals(strIcon))
			return R.drawable.a_20;
		if ("21.gif".equals(strIcon))
			return R.drawable.a_21;
		if ("22.gif".equals(strIcon))
			return R.drawable.a_22;
		if ("23.gif".equals(strIcon))
			return R.drawable.a_23;
		if ("24.gif".equals(strIcon))
			return R.drawable.a_24;
		if ("25.gif".equals(strIcon))
			return R.drawable.a_25;
		if ("26.gif".equals(strIcon))
			return R.drawable.a_26;
		if ("27.gif".equals(strIcon))
			return R.drawable.a_27;
		if ("28.gif".equals(strIcon))
			return R.drawable.a_28;
		if ("29.gif".equals(strIcon))
			return R.drawable.a_29;
		if ("30.gif".equals(strIcon))
			return R.drawable.a_30;
		if ("31.gif".equals(strIcon))
			return R.drawable.a_31;
		return 0;
	}
}




/**
 * 
 */
package org.crazyit.net;

import java.util.List;

import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class ListAdapter extends BaseAdapter
{
	private Context context;
	private List<String> values;
	
	public ListAdapter(Context context , List<String> values)
	{
		this.context = context;
		this.values = values;
	}

	@Override
	public int getCount()
	{
		return values.size();
	}

	@Override
	public Object getItem(int position)
	{
		return values.get(position);
	}

	@Override
	public long getItemId(int position)
	{
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent)
	{
		TextView text = new TextView(context);
		text.setText(values.get(position));
		text.setTextSize(20);
		text.setTextColor(Color.BLACK);
		return text;
	}
}


/**
 * 
 */
package org.crazyit.net;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class WebServiceUtil
{
	// 定义Web Service的命名空间
	static final String SERVICE_NS = "http://WebXml.com.cn/";
	// 定义Web Service提供服务的URL
	static final String SERVICE_URL = 
		"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx";

	// 调用远程Web Service获取省份列表
	public static List<String> getProvinceList()
	{
		// 调用的方法
		String methodName = "getRegionProvince";
		// 创建HttpTransportSE传输对象
		HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
		ht.debug = true;
		// 使用SOAP1.1协议创建Envelop对象
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
			SoapEnvelope.VER11);
		// 实例化SoapObject对象
		SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
		envelope.bodyOut = soapObject;
		// 设置与.Net提供的Web Service保持较好的兼容性
		envelope.dotNet = true;
		try
		{
			// 调用Web Service
			ht.call(SERVICE_NS + methodName, envelope);
			if (envelope.getResponse() != null)
			{
				// 获取服务器响应返回的SOAP消息
				SoapObject result = (SoapObject) envelope.bodyIn;
				SoapObject detail = (SoapObject) result.getProperty(methodName
					+ "Result");
				// 解析服务器响应的SOAP消息。
				return parseProvinceOrCity(detail);
			}
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		catch (XmlPullParserException e)
		{
			e.printStackTrace();
		}
		return null;
	}

	// 根据省份获取城市列表
	public static List<String> getCityListByProvince(String province)
	{
		// 调用的方法
		String methodName = "getSupportCityString";
		// 创建HttpTransportSE传输对象
		HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
		ht.debug = true;
		// 实例化SoapObject对象
		SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
		// 添加一个请求参数
		soapObject.addProperty("theRegionCode", province);
		// 使用SOAP1.1协议创建Envelop对象
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
			SoapEnvelope.VER11);
		envelope.bodyOut = soapObject;
		// 设置与.Net提供的Web Service保持较好的兼容性
		envelope.dotNet = true;
		try
		{
			// 调用Web Service
			ht.call(SERVICE_NS + methodName, envelope);
			if (envelope.getResponse() != null)
			{
				// 获取服务器响应返回的SOAP消息
				SoapObject result = (SoapObject) envelope.bodyIn;
				SoapObject detail = (SoapObject) result.getProperty(methodName
					+ "Result");
				// 解析服务器响应的SOAP消息。
				return parseProvinceOrCity(detail);
			}
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		catch (XmlPullParserException e)
		{
			e.printStackTrace();
		}
		return null;
	}

	private static List<String> parseProvinceOrCity(SoapObject detail)
	{
		ArrayList<String> result = new ArrayList<String>();
		for (int i = 0; i < detail.getPropertyCount(); i++)
		{
			// 解析出每个省份
			result.add(detail.getProperty(i).toString().split(",")[0]);
		}
		return result;
	}

	public static SoapObject getWeatherByCity(String cityName)
	{
		String methodName = "getWeather";
		HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
		ht.debug = true;
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
			SoapEnvelope.VER11);
		SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
		soapObject.addProperty("theCityCode", cityName);
		envelope.bodyOut = soapObject;
		// 设置与.Net提供的Web Service保持较好的兼容性
		envelope.dotNet = true;
		try
		{
			ht.call(SERVICE_NS + methodName, envelope);
			SoapObject result = (SoapObject) envelope.bodyIn;
			SoapObject detail = (SoapObject) result.getProperty(methodName
				+ "Result");
			return detail;
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<TextView
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:hint="@string/province"/>
<!-- 让用户选择省份的Spinner -->
<Spinner 
	android:id="@+id/province" 
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"/>	
</LinearLayout>
<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<TextView
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:hint="@string/city"/>
<!-- 让用户选择城市的Spinner -->
<Spinner 
	android:id="@+id/city" 
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"/>	
</LinearLayout>
<!-- 显示今天天气的图片和文本框 -->
<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<ImageView
	android:id="@+id/todayWhIcon1"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<ImageView
	android:id="@+id/todayWhIcon2"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<TextView
	android:id="@+id/weatherToday"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:layout_weight="1"/>
</LinearLayout>
<!-- 显示明天天气的图片和文本框 -->
<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<ImageView
	android:id="@+id/tomorrowWhIcon1"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<ImageView
	android:id="@+id/tomorrowWhIcon2"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<TextView
	android:id="@+id/weatherTomorrow"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:layout_weight="1"/>
</LinearLayout>
<!-- 显示后天天气的图片和文本框 -->
<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<ImageView
	android:id="@+id/afterdayWhIcon1"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<ImageView
	android:id="@+id/afterdayWhIcon2"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<TextView
	android:id="@+id/weatherAfterday"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:layout_weight="1"/>
</LinearLayout>
<TextView
	android:id="@+id/weatherCurrent"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"/>
</LinearLayout>




<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, Weather!</string>
    <string name="app_name">天气预报</string>
    <string name="btn_apply">查询</string>
    <string name="text_hint">城市中文名</string>
    <string name="province">省份</string>
    <string name="city">城市</string>
</resources>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	  package="org.crazyit.net"
	  android:versionCode="1"
	  android:versionName="1.0">
	   <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
	   
	<uses-permission android:name="android.permission.INTERNET"></uses-permission>
	
	<application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name">	
		<activity android:name=".MyWeather"
				  android:label="@string/app_name">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>

	</application>


</manifest> 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<TextView
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:hint="@string/province"/>
<!-- 让用户选择省份的Spinner -->
<Spinner 
	android:id="@+id/province" 
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"/>	
</LinearLayout>
<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<TextView
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:hint="@string/city"/>
<!-- 让用户选择城市的Spinner -->
<Spinner 
	android:id="@+id/city" 
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"/>	
</LinearLayout>
<!-- 显示今天天气的图片和文本框 -->
<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<ImageView
	android:id="@+id/todayWhIcon1"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<ImageView
	android:id="@+id/todayWhIcon2"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<TextView
	android:id="@+id/weatherToday"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:layout_weight="1"/>
</LinearLayout>
<!-- 显示明天天气的图片和文本框 -->
<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<ImageView
	android:id="@+id/tomorrowWhIcon1"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<ImageView
	android:id="@+id/tomorrowWhIcon2"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<TextView
	android:id="@+id/weatherTomorrow"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:layout_weight="1"/>
</LinearLayout>
<!-- 显示后天天气的图片和文本框 -->
<LinearLayout
	android:layout_width="fill_parent"
	android:layout_height="wrap_content">
<ImageView
	android:id="@+id/afterdayWhIcon1"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<ImageView
	android:id="@+id/afterdayWhIcon2"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<TextView
	android:id="@+id/weatherAfterday"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:layout_weight="1"/>
</LinearLayout>
<TextView
	android:id="@+id/weatherCurrent"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"/>
</LinearLayout>


顶 0踩 0收藏
文章评论
    发表评论

    个人资料

    • 昵称: ETmanwenhan
    • 等级: 初级程序员
    • 积分: 20
    • 代码: 0 个
    • 文章: 1 篇
    • 随想: 0 条
    • 访问: 4 次
    • 关注

    人气文章

    人气代码

      最新提问

        站长推荐