android自动获取天气,android通过google API获取天气信息(转载)

这是一个基于Java的天气查询应用,通过SAXParser解析XML数据,从Google API获取并展示城市天气信息。应用中包含了进度对话框、定时器以及消息处理器来处理数据加载过程。点击按钮触发查询,结果显示在表格布局中,包括天气图片、日期、温度范围和天气状况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值