http://www.oschina.net/code/snippet_149945_6389
[代码] [Java]代码001publicclassWeatherActivityextendsActivity {002privateTextView txCity;003privateButton btnSearch;004privateHandler weatherhandler;005privateDialog progressDialog;006privateTimer timer;007/**Called when the activity is first created.*/008@Override009publicvoidonCreate(Bundle savedInstanceState) {010super.onCreate(savedInstanceState);011setContentView(R.layout.main);012timer=newTimer();013txCity=(TextView)findViewById(R.id.txCity);014btnSearch=(Button)findViewById(R.id.btnSearch);015progressDialog=newAlertDialog.Builder(this)016.setTitle("读取数据中")017.setMessage("正在加载数据,请稍等")018.create();019020weatherhandler=newHandler(){021publicvoidhandleMessage(Message msg){022finalString cityName=txCity.getText().toString().trim();023searchWeather(cityName);024progressDialog.hide();025}026};027028btnSearch.setOnClickListener(newOnClickListener() {029030@Override031publicvoidonClick(View v) {032progressDialog.show();033timer.schedule(newTimerTask() {034@Override035publicvoidrun() {036Message msg=newMessage();037msg.setTarget(weatherhandler);038msg.sendToTarget();039}040},100);041}042});043}044privatevoidsearchWeather(String city){045SAXParserFactory spf=SAXParserFactory.newInstance();046try{047SAXParser sp=spf.newSAXParser();048XMLReader reader=sp.getXMLReader();049XmlHandler handler=newXmlHandler();050reader.setContentHandler(handler);051URL url=newURL("http://www.google.com/ig/api?hl=zh-cn&weather="+URLEncoder.encode(city));052InputStream is=url.openStream();053InputStreamReader isr=newInputStreamReader(is,"GBK");054InputSource source=newInputSource(isr);055reader.parse(source);056ListweatherList=handler.getWeatherList();057TableLayout table=(TableLayout)findViewById(R.id.table);058table.removeAllViews();059for(Weather weather:weatherList){060TableRow row=newTableRow(this);061row.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));062row.setGravity(Gravity.CENTER_VERTICAL);063ImageView img=newImageView(this);064img.setImageDrawable(loadImage(weather.getImageUrl()));065img.setMinimumHeight(80);066row.addView(img);067TextView day=newTextView(this);068day.setText(weather.getDay());069day.setGravity(Gravity.CENTER_HORIZONTAL);070row.addView(day);071TextView temp=newTextView(this);072temp.setText(weather.getLowTemp()+"℃-"+weather.getHighTemp()+"℃");073temp.setGravity(Gravity.CENTER_HORIZONTAL);074row.addView(temp);075TextView condition=newTextView(this);076condition.setText(weather.getCondition());077condition.setGravity(Gravity.CENTER_HORIZONTAL);078row.addView(condition);079table.addView(row);080}081}catch(Exception e) {082e.printStackTrace();083newAlertDialog.Builder(this)084.setTitle("解析错误")085.setMessage("获取天气数据失败,请稍候再试。")086.setNegativeButton("确定",null)087.show();088}089090}091privateDrawable loadImage(String imageUrl) {092try{093returnDrawable.createFromStream((InputStream)newURL("http://www.google.com/"+imageUrl).getContent(),"test");094}catch(MalformedURLException e) {095e.printStackTrace();096}catch(IOException e) {097e.printStackTrace();098}099returnnull;100}101}