小功能 获取天气预报 城市联动

效果图(一)

效果图(二)


核心代码

Function_Weather.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;

import com.google.gson.Gson;

import android.util.Log;

public class Function_Weather
{
	/**
	 * 获取天气城市
	 * 
	 * @param pid
	 *            二级 -1为获取全部
	 * @param cid
	 *            三级 -1为获取二级全部
	 * @return
	 */
	public static ArrayList<WeatherGetAreaModel> GetCity(int pid, int cid)
	{
		ArrayList<WeatherGetAreaModel> list = new ArrayList<WeatherGetAreaModel>();
		Gson gson = new Gson();
		String par = "";
		String pidString = "";
		String cidString = "";
		if (pid < 10)
		{
			pidString = "0" + pid;
		}
		if (cid < 10)
		{
			cidString = "0" + cid;
		}
		if (pid > 0)
		{
			par += "?pid=" + pidString;
			if (cid > 0)
			{
				par += "&cid=" + cidString;
			}
		}
		try
		{
			URL url = new URL("http://www.hao123.com/api/citymenu" + par);
			Log.i("WebService", "天气城市:" + url);
			InputStreamReader reader = new InputStreamReader(url.openStream());
			BufferedReader br = new BufferedReader(reader);
			String s = br.readLine();
			String listString = s.substring(1, s.length() - 1);

			String[] sarray = listString.split("\\{");
			for (int i = 1; i < sarray.length; i++)
			{
				String fullValue = sarray[i];
				String thisValue = null;
				if (fullValue.substring(fullValue.length() - 1, fullValue.length()).equals("}"))
				{
					thisValue = "{" + fullValue;
				} else
				{
					thisValue = "{" + fullValue.substring(0, fullValue.length() - 1);
				}
				WeatherGetAreaModel model = new WeatherGetAreaModel();
				model = gson.fromJson(thisValue, WeatherGetAreaModel.class);

				if (pid == 0)
				{
					if (!model.id().equals("35"))// 去除国外选项
					{
						Log.i("WebService", "天气城市:" + model.name());
						list.add(model);
					}
				} else
				{
					Log.i("WebService", "天气城市:" + model.name());
					list.add(model);
				}
			}
			br.close();
			reader.close();
		} catch (IOException e)
		{
			list = null;
			Log.e("WebService", "获取天气城市出错:" + e.toString());
		}
		return list;
	}

	/**
	 * 获取城市天气详情
	 * 
	 * @param cityid
	 */
	public static WeatherCityinfo_Model GetCityInfo(String cityid)
	{
		Gson gson = new Gson();
		try
		{
			URL url = new URL("http://www.weather.com.cn/data/cityinfo/" + cityid + ".html");
			Log.i("WebService", "城市天气详情:" + url);
			InputStreamReader reader = new InputStreamReader(url.openStream());
			BufferedReader br = new BufferedReader(reader);
			String s = br.readLine();
			String sub = s.substring(15, s.length() - 1);
			WeatherCityinfo_Model model = new WeatherCityinfo_Model();
			model = gson.fromJson(sub, WeatherCityinfo_Model.class);
			Log.i("WebService", "获取城市天气详情:" + model.city() + ":" + model.weather());
			br.close();
			reader.close();
			return model;
		} catch (IOException e)
		{
			Log.e("WebService", "获取城市天气详情:" + e.toString());
			return null;
		}
	}

	/**
	 * 获取城市天气实况
	 * 
	 * @param cityid
	 */
	public static WeatherSk_Model GetCitySk(String cityid)
	{
		Gson gson = new Gson();
		try
		{
			URL url = new URL("http://www.weather.com.cn/data/sk/" + cityid + ".html");
			Log.i("WebService", "城市天气实况:" + url);
			InputStreamReader reader = new InputStreamReader(url.openStream());
			BufferedReader br = new BufferedReader(reader);
			String s = br.readLine();
			String sub = s.substring(15, s.length() - 1);
			WeatherSk_Model model = new WeatherSk_Model();
			model = gson.fromJson(sub, WeatherSk_Model.class);
			Log.i("WebService", "获取城市天气实况:" + model.city());
			br.close();
			reader.close();
			return model;
		} catch (IOException e)
		{
			Log.e("WebService", "获取城市天气实况:" + e.toString());
			return null;
		}
	}
}

Main.java

/**
	 * 获取城市天气详情
	 */
	private void GetWeather()
	{
		startweather_loading();
		weatherThread = new Thread(getWeatherRunnable);
		weatherThread.start();
	}

	private Runnable getWeatherRunnable = new Runnable()
	{
		@Override
		public void run()
		{
			GetNowWeatherArea(selcityid);
			getWeatherHandler.sendEmptyMessage(3);
			weather_info = Function_Weather.GetCityInfo(selcityid);
			weather_sk = Function_Weather.GetCitySk(selcityid);
			if (weather_info != null && weather_sk != null)
			{
				getWeatherHandler.sendEmptyMessage(0);
			} else
			{
				getWeatherHandler.sendEmptyMessage(1);
			}
		}
	};

	private Handler getWeatherHandler = new Handler()
	{
		public void handleMessage(Message msg)
		{
			switch (msg.what)
			{
			case 0:
				cityname.setText(weather_info.city());
				String temp = weather_info.temp1().replace("℃", "") + "~" + weather_info.temp2();
				weather_temp.setText(temp);
				String info1 = weather_info.weather();
				weather_info1.setText(info1);
				String info2 = weather_sk.WD() + weather_sk.WS() + " 湿度" + weather_sk.SD();
				weather_info2.setText(info2);
				Drawable drawable = null;
				String img = weather_info.img1();
				if (img.equals("d0.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_0);
				} else if (img.equals("d1.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_1);
				} else if (img.equals("d2.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_2);
				} else if (img.equals("d3.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_3);
				} else if (img.equals("d4.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_4);
				} else if (img.equals("d5.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_5);
				} else if (img.equals("d6.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_6);
				} else if (img.equals("d7.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_7);
				} else if (img.equals("d8.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_8);
				} else if (img.equals("d9.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_9);
				} else if (img.equals("d10.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_10);
				} else if (img.equals("d11.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_11);
				} else if (img.equals("d12.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_12);
				} else if (img.equals("d13.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_13);
				} else if (img.equals("d14.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_14);
				} else if (img.equals("d15.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_15);
				} else if (img.equals("d16.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_16);
				} else if (img.equals("d17.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_17);
				} else if (img.equals("d18.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_18);
				} else if (img.equals("d19.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_19);
				} else if (img.equals("d20.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_20);
				} else if (img.equals("d21.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_21);
				} else if (img.equals("d22.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_22);
				} else if (img.equals("d23.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_23);
				} else if (img.equals("d24.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_24);
				} else if (img.equals("d25.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_25);
				} else if (img.equals("d26.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_26);
				} else if (img.equals("d27.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_27);
				} else if (img.equals("d28.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_28);
				} else if (img.equals("d29.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_29);
				} else if (img.equals("d30.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_30);
				} else if (img.equals("d31.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_31);
				} else if (img.equals("d53.gif"))
				{
					drawable = getResources().getDrawable(R.drawable.weather_type_53);
				}
				if (drawable != null)
				{
					weather_img1.setBackgroundDrawable(drawable);
				}
				stopweather_loading();
				break;
			case 1:
				stopweather_loading();
				weather_error.setVisibility(View.VISIBLE);
				break;
			case 3:
				cityname.setText(nowWeatherAreaModel.areaname3());
				break;
			}
		}
	};

本例中使用到了 自定义弹窗(三) 里面城市联动选择功能


详细代码 本例源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值