Android簡單的天氣預報

 

城市用spinner類存放,讀取xml文件,填充到spinner中。xml文件時在本地的res/raw文件夾中。

並且給三個spinner添加監聽事件。當選擇省份時,存放城市和地區的spinner會作相應變化,同樣,選擇城市時,地區的spinner會作相應變化。

 

// 當選擇省份時,城市和地方列表會變化
		sp_province.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView parent, View view,
					int position, long id) {
				currentPro = position;
				cityAdapter = new ArrayAdapter(MainActivity.this,
						android.R.layout.simple_spinner_item,
						android.R.id.text1, provinces.get(position).getCitys());
				cityAdapter
						.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
				sp_city.setAdapter(cityAdapter);
			}

			@Override
			public void onNothingSelected(AdapterView parent) {
			}
		});


 

當選擇具體的地區時,創建異步類,並把地區名稱作為參數。

 

// 當選擇地方時,顯示具體的天氣情況
		sp_district.setOnItemSelectedListener(new OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView parent, View view,
					int position, long id) {
				// 選擇的城市
				District dis = districtAdapter.getItem(position);
				// Log.i(i, dis.getName());
				new WeatherAsyncTask().execute(dis.getName());
			}

			@Override
			public void onNothingSelected(AdapterView parent) {
			}
		});

 

 

在異步類的doInBackground方法中,從接口中獲取到天氣信息,在這兒處理圖片我是這麼做的,在Weather_data這個類中定義瞭兩個Bitmap類型的屬性(這兩個屬性在解析從接口獲取到的天氣信息的json字符串時時沒有用的),從網絡上獲取後給這兩個屬性賦值,然後將已經封裝好的Weather傳遞給onPostExecute方法

 

protected Weather doInBackground(String... params) {
			String url = HttpUtils.getURl(params[0]);
			String jsonStr = HttpUtils.getJsonStr(url);
			Weather weather = HttpUtils.fromJson(jsonStr);
			Result r = weather.getResults().get(0);
			List<map> list = new ArrayList<map>();
			list = HttpUtils.toListMap(r);
			for(int i = 0;i<3;i++){
				Weather_data w = r.getWeather_data().get(i);
				w.setDayPicture(HttpUtils.getImage(w.getDayPictureUrl()));
				w.setNightPicture(HttpUtils.getImage(w.getNightPictureUrl()));
			}
			return weather;
		}</map</map

也可以通過將Weather的具體信息和通過imageUrl獲取到的圖片存放到一個list<map>中,然後傳遞給onPostExecute方法</map

在這個方法中,UI線程給佈局中的各個控件賦值。

在獲取資源的過程中,我單獨定義瞭一個工具類,

包含瞭處理瞭解析xml文件,解析json字符串和獲取image等方法。

在顯示時,隻是用瞭從百度接口中獲取到的一些屬性,並沒有用全部。不過大體原理應該如此瞭。

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *