欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

android通过google API获取天气信息,androidapi

来源: 开发者 投稿于  被查看 17945 次 评论:110

android通过google API获取天气信息,androidapi


通过google API获取天气信息

1.[Java]代码

public class WeatherActivity extends Activity {
	private TextView txCity;
	private Button btnSearch;
	private Handler weatherhandler;
	private Dialog progressDialog;
	private Timer timer;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        timer = new Timer();
        txCity = (TextView)findViewById(R.id.txCity);
        btnSearch = (Button)findViewById(R.id.btnSearch);
        progressDialog = new AlertDialog.Builder(this)
        .setTitle("读取数据中")
        .setMessage("正在加载数据,请稍等")
        .create();
        
        weatherhandler = new Handler(){
        	public void handleMessage(Message msg){
        		final String cityName = txCity.getText().toString().trim();
        		searchWeather(cityName);
        		progressDialog.hide();
        	}
        };
        
        btnSearch.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				progressDialog.show();
				timer.schedule(new TimerTask() {
					@Override
					public void run() {
						Message msg = new Message();
						msg.setTarget(weatherhandler);
						msg.sendToTarget();
					}
				},100);
			}
		});
    }
    private void searchWeather(String city){
    	SAXParserFactory spf = SAXParserFactory.newInstance();
    	try {
			SAXParser sp = spf.newSAXParser();
			XMLReader reader = sp.getXMLReader();
			XmlHandler handler = new XmlHandler();
			reader.setContentHandler(handler);
			URL url = new URL("http://www.google.com/ig/api?hl=zh-cn&weather="+URLEncoder.encode(city));
			InputStream is = url.openStream();
			InputStreamReader isr = new InputStreamReader(is, "GBK");
			InputSource source = new InputSource(isr);
			reader.parse(source);
			List<Weather>weatherList = handler.getWeatherList();
			TableLayout table = (TableLayout)findViewById(R.id.table);
			table.removeAllViews();
			for(Weather weather:weatherList){
				TableRow row = new TableRow(this);
				row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
				row.setGravity(Gravity.CENTER_VERTICAL);
				ImageView img = new ImageView(this);
				img.setImageDrawable(loadImage(weather.getImageUrl()));
				img.setMinimumHeight(80);
				row.addView(img);
				TextView day = new TextView(this);
				day.setText(weather.getDay());
				day.setGravity(Gravity.CENTER_HORIZONTAL);
				row.addView(day);
				TextView temp = new TextView(this);
				temp.setText(weather.getLowTemp()+"℃-"+weather.getHighTemp()+"℃");
				temp.setGravity(Gravity.CENTER_HORIZONTAL);
				row.addView(temp);
				TextView condition = new TextView(this);
				condition.setText(weather.getCondition());
				condition.setGravity(Gravity.CENTER_HORIZONTAL);
				row.addView(condition);
				table.addView(row);
			}
		} catch (Exception e) {
			e.printStackTrace();
			new AlertDialog.Builder(this)
				.setTitle("解析错误")
				.setMessage("获取天气数据失败,请稍候再试。")
				.setNegativeButton("确定", null)
				.show();		
		}
    	
    }
	private Drawable loadImage(String imageUrl) {
		try {
			return Drawable.createFromStream((InputStream) new URL("http://www.google.com/"+imageUrl).getContent(), "test");
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
}

2.[图片] 未命名.jpg

3.[文件] weather.zip~59KB 下载(2225)

用户评论