android通过google API获取天气信息

android通过google API获取天气信息(转载)
http://www.oschina.net/code/snippet_149945_6389

[代码] [Java]代码
001      public   class  WeatherActivity  extends  Activity {
002          private  TextView txCity;
003          private  Button btnSearch;
004          private  Handler weatherhandler;
005          private  Dialog progressDialog;
006          private  Timer timer;
007          /**  Called when the activity is first created.  */
008         @Override
009          public   void  onCreate(Bundle savedInstanceState) {
010              super .onCreate(savedInstanceState);
011             setContentView(R.layout.main);
012             timer  =   new  Timer();
013             txCity  =  (TextView)findViewById(R.id.txCity);
014             btnSearch  =  (Button)findViewById(R.id.btnSearch);
015             progressDialog  =   new  AlertDialog.Builder( this )
016             .setTitle( " 读取数据中 " )
017             .setMessage( " 正在加载数据,请稍等 " )
018             .create();
019              
020             weatherhandler  =   new  Handler(){
021                  public   void  handleMessage(Message msg){
022                      final  String cityName  =  txCity.getText().toString().trim();
023                     searchWeather(cityName);
024                     progressDialog.hide();
025                 }
026             };
027              
028             btnSearch.setOnClickListener( new  OnClickListener() {
029                  
030                 @Override
031                  public   void  onClick(View v) {
032                     progressDialog.show();
033                     timer.schedule( new  TimerTask() {
034                         @Override
035                          public   void  run() {
036                             Message msg  =   new  Message();
037                             msg.setTarget(weatherhandler);
038                             msg.sendToTarget();
039                         }
040                     }, 100 );
041                 }
042             });
043         }
044          private   void  searchWeather(String city){
045             SAXParserFactory spf  =  SAXParserFactory.newInstance();
046              try  {
047                 SAXParser sp  =  spf.newSAXParser();
048                 XMLReader reader  =  sp.getXMLReader();
049                 XmlHandler handler  =   new  XmlHandler();
050                 reader.setContentHandler(handler);
051                 URL url  =   new  URL( " http://www.google.com/ig/api?hl=zh-cn&weather= " + URLEncoder.encode(city));
052                 InputStream is  =  url.openStream();
053                 InputStreamReader isr  =   new  InputStreamReader(is,  " GBK " );
054                 InputSource source  =   new  InputSource(isr);
055                 reader.parse(source);
056                 List < Weather > weatherList  =  handler.getWeatherList();
057                 TableLayout table  =  (TableLayout)findViewById(R.id.table);
058                 table.removeAllViews();
059                  for (Weather weather:weatherList){
060                     TableRow row  =   new  TableRow( this );
061                     row.setLayoutParams( new  LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
062                     row.setGravity(Gravity.CENTER_VERTICAL);
063                     ImageView img  =   new  ImageView( this );
064                     img.setImageDrawable(loadImage(weather.getImageUrl()));
065                     img.setMinimumHeight( 80 );
066                     row.addView(img);
067                     TextView day  =   new  TextView( this );
068                     day.setText(weather.getDay());
069                     day.setGravity(Gravity.CENTER_HORIZONTAL);
070                     row.addView(day);
071                     TextView temp  =   new  TextView( this );
072                     temp.setText(weather.getLowTemp() + " ℃- " + weather.getHighTemp() + " " );
073                     temp.setGravity(Gravity.CENTER_HORIZONTAL);
074                     row.addView(temp);
075                     TextView condition  =   new  TextView( this );
076                     condition.setText(weather.getCondition());
077                     condition.setGravity(Gravity.CENTER_HORIZONTAL);
078                     row.addView(condition);
079                     table.addView(row);
080                 }
081             }  catch  (Exception e) {
082                 e.printStackTrace();
083                  new  AlertDialog.Builder( this )
084                     .setTitle( " 解析错误 " )
085                     .setMessage( " 获取天气数据失败,请稍候再试。 " )
086                     .setNegativeButton( " 确定 " null )
087                     .show();       
088             }
089              
090         }
091          private  Drawable loadImage(String imageUrl) {
092              try  {
093                  return  Drawable.createFromStream((InputStream)  new  URL( " http://www.google.com/ " + imageUrl).getContent(),  " test " );
094             }  catch  (MalformedURLException e) {
095                 e.printStackTrace();
096             }  catch  (IOException e) {
097                 e.printStackTrace();
098             }
099              return   null ;
100         }
101     }

你可能感兴趣的:(android通过google API获取天气信息)