package com.bigfat.coolweather.activity; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import com.bigfat.coolweather.R; import com.bigfat.coolweather.service.AutoUpdateService; import com.bigfat.coolweather.util.HttpCallbackListener; import com.bigfat.coolweather.util.HttpUtil; import com.bigfat.coolweather.util.Utility; import com.bigfat.coolweather.util.WeatherApiUtil; /** * @author <a href="mailto:fbzhh007@gmail.com">bigfat</a> * @since 2014/12/18 */ public class WeatherActivity extends Activity implements View.OnClickListener { private LinearLayout weatherInfoLayout; /** * 显示城市名 */ private TextView cityNameText; /** * 显示发布时间 */ private TextView publishText; /** * 显示天气描述信息(气象) */ private TextView weatherDespText; /** * 显示白天气温 */ private TextView temp1Text; /** * 显示夜晚气温 */ private TextView temp2Text; /** * 显示当前日期 */ private TextView currentDateText; /** * 切换城市按钮 */ private Button switchCity; /** * 更新天气按钮 */ private Button refreshWeather; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.weather_layout); //绑定控件 weatherInfoLayout = (LinearLayout) findViewById(R.id.weather_info_layout); cityNameText = (TextView) findViewById(R.id.city_name); publishText = (TextView) findViewById(R.id.publish_text); weatherDespText = (TextView) findViewById(R.id.weather_desp); temp1Text = (TextView) findViewById(R.id.temp1); temp2Text = (TextView) findViewById(R.id.temp2); currentDateText = (TextView) findViewById(R.id.current_date); switchCity = (Button) findViewById(R.id.switch_city); refreshWeather = (Button) findViewById(R.id.refresh_weather); //绑定监听器 switchCity.setOnClickListener(this); refreshWeather.setOnClickListener(this); String areaId = getIntent().getStringExtra("area_id"); if (!TextUtils.isEmpty(areaId)) {//有地区码则联网请求天气 publishText.setText("同步中..."); weatherInfoLayout.setVisibility(View.INVISIBLE); cityNameText.setVisibility(View.INVISIBLE); queryFromServer(areaId); } else {//没有地区码则直接显示本地天气 showWeather(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.switch_city: Intent intent = new Intent(this, ChooseAreaActivity.class); intent.putExtra("from_weather_activity", true); startActivity(intent); finish(); break; case R.id.refresh_weather: publishText.setText("同步中..."); String areaId = PreferenceManager.getDefaultSharedPreferences(this).getString("area_id", ""); if (!TextUtils.isEmpty(areaId)) { queryFromServer(areaId); } break; } } /** * 从服务器获取天气信息 * * @param areaId 地区码 */ private void queryFromServer(String areaId) { HttpUtil.sendHttpRequest(WeatherApiUtil.getWeatherUrl(areaId, "forecast_v"), new HttpCallbackListener() { @Override public void onFinish(final String response) { //处理服务器返回的天气信息 Utility.handleWeatherResponse(WeatherActivity.this, response); runOnUiThread(new Runnable() { @Override public void run() { showWeather(); } }); } @Override public void onError(Exception e) { runOnUiThread(new Runnable() { @Override public void run() { publishText.setText("同步失败"); } }); } }); } /** * 从SharedPreferences文件中读取天气信息,并显示到界面上 */ private void showWeather() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); cityNameText.setText(prefs.getString("city_name", "")); temp1Text.setText(prefs.getString("temp1", "")); temp2Text.setText(prefs.getString("temp2", "")); weatherDespText.setText(prefs.getString("weather_desp", "")); publishText.setText(prefs.getString("publish_time", "") + "发布"); currentDateText.setText(prefs.getString("current_date", "")); weatherInfoLayout.setVisibility(View.VISIBLE); cityNameText.setVisibility(View.VISIBLE); //启动天气自动更新Service Intent intent = new Intent(this, AutoUpdateService.class); startService(intent); } }