android通过google API获取天气信息

复制代码 代码如下:
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);
   ListweatherList = 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;
 }
}

更多相关文章

  1. Android 代码里设置ImageView的src和background
  2. Android简单文件浏览器源代码
  3. Android录音时,根据PCM数据获取音量值(单位分贝)
  4. Android 之往通讯录中添加数据和查询数据
  5. Android利用setLayoutParams在代码中调整布局(Margin和居中)
  6. Android非Kotlin支持项目添加Kotlin代码时的注意点

随机推荐

  1. 2013.03.19——— android 音视频编解码
  2. android设置Activity背景色为透明的2种方
  3. android中的数据库操作(SQLite)
  4. Android中的五大布局
  5. Android异步处理系列文章四篇之四 AsyncT
  6. 如何配置android的adb环境变量
  7. SSH服务器与Android通信(3)--Android客户
  8. Cydia for Android
  9. Android窗口机制(四)ViewRootImpl与View和W
  10. Android Handler机制3之SystemClock类