城市用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等方法。
在顯示時,隻是用瞭從百度接口中獲取到的一些屬性,並沒有用全部。不過大體原理應該如此瞭。