package com.example.myweather;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements View.OnClickListener{
private ImageView UpdateBtn,weatherStateImg,pmStateImg;
private TextView cityNameT,cityT,timeT,humidityT,weekT,pmDataT,pmQualityT,temperatureT,climateT,windT;
TodayWeather todayWeather = null;
private Handler mHandler =new Handler()
{
public void handleMessage(android.os.Message msg)
{
switch(msg.what)
{case 1:
updateTodayWeather((TodayWeather)msg.obj);
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("MainActivity","onCreate");
setContentView(R.layout.activity_main);
UpdateBtn=(ImageView)findViewById(R.id.title_update);
UpdateBtn.setOnClickListener(this);
initView();
}
private void queryWeatherCode(String cityCode) {
final String address = "http://wthrcdn.etouch.cn/WeatherApi?citykey=" + cityCode;
Log.d("myWeather", address);
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection con=null;
try{
URL url = new URL(address);
con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
con.setConnectTimeout(8000);
con.setReadTimeout(8000);
InputStream in = con.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String str;
while((str=reader.readLine()) != null){
response.append(str);
Log.d("myWeather", str);
}
String responseStr=response.toString();
Log.d("myWeather", responseStr);
// Todo 解析返回的xml
todayWeather=parseXML(responseStr);
if(todayWeather!=null)
{
Message msg=new Message();
msg.what=1;
msg.obj=todayWeather;
mHandler.sendMessage(msg);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(con != null){
con.disconnect();
}
Log.d("myWeather","Thread ending");
}
}
}).start();
}
private TodayWeather parseXML(String xmldata) {
TodayWeather todayWeather =new TodayWeather ();
int fengxiangCount=0;
int fengliCount =0;
int dateCount=0;
int highCount =0;
int lowCount=0;
int typeCount =0;
try {
XmlPullParserFactory fac = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = fac.newPullParser();
xmlPullParser.setInput(new StringReader(xmldata));
int eventType = xmlPullParser.getEventType();
Log.d("myWeather", "parseXML");
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
// 判断当前事件是否为文档开始事件
case XmlPullParser.START_DOCUMENT:
break;
// 判断当前事件是否为标签元素开始事件
case XmlPullParser.START_TAG:
if (xmlPullParser.getName().equals("city")) {
eventType = xmlPullParser.next();
Log.d("myWeather", "city: "+xmlPullParser.getText());
todayWeather.setCity(xmlPullParser.getText());
} else if (xmlPullParser.getName().equals("updatetime")) {
eventType = xmlPullParser.next();
Log.d("myWeather", "updatetime:"+xmlPullParser.getText());
todayWeather.setUpdatetime(xmlPullParser.getText());
}else if (xmlPullParser.getName().equals("shidu")) {
eventType = xmlPullParser.next();
Log.d("myWeather", "shidu: "+xmlPullParser.getText());
todayWeather.setShidu(xmlPullParser.getText());
} else if (xmlPullParser.getName().equals("wendu")) {
eventType = xmlPullParser.next();
Log.d("myWeather", "wendu: "+xmlPullParser.getText());
todayWeather.setWendu(xmlPullParser.getText());
} else if (xmlPullParser.getName().equals("pm25")) {
eventType = xmlPullParser.next();
Log.d("myWeather", "pm25: "+xmlPullParser.getText());
todayWeather.setPm25(xmlPullParser.getText());
} else if (xmlPullParser.getName().equals("quality")) {
eventType = xmlPullParser.next();
Log.d("myWeather", "quality: "+xmlPullParser.getText());
todayWeather.setQuality(xmlPullParser.getText());
} else if(xmlPullParser.getName().equals("fengxiang") && fengxiangCount==0) {
eventType = xmlPullParser.next();
Log.d("myWeather", "fengxiang:"+xmlPullParser.getText());
todayWeather.setFengxiang(xmlPullParser.getText());
fengxiangCount++;
} else if(xmlPullParser.getName().equals("fengli")&&fengliCount==0) {
eventType = xmlPullParser.next();
Log.d("myWeather", "fengli: "+xmlPullParser.getText());
todayWeather.setFengli(xmlPullParser.getText());
fengliCount++;
} else if (xmlPullParser.getName().equals("date") && dateCount==0) {
eventType = xmlPullParser.next();
Log.d("myWeather", "date: "+xmlPullParser.getText());
todayWeather.setDate(xmlPullParser.getText());
dateCount++;
} else if (xmlPullParser.getName().equals("high") && highCount==0) {
eventType = xmlPullParser.next();
Log.d("myWeather", "high: "+xmlPullParser.getText());
todayWeather.setHigh(xmlPullParser.getText());
highCount++;
} else if (xmlPullParser.getName().equals("low") && lowCount==0) {
eventType = xmlPullParser.next();
Log.d("myWeather", "low: "+xmlPullParser.getText());
todayWeather.setLow(xmlPullParser.getText());
lowCount++;
} else if (xmlPullParser.getName().equals("type") && typeCount==0) {
eventType = xmlPullParser.next();
Log.d("myWeather", "type: "+xmlPullParser.getText());
todayWeather.setType(xmlPullParser.getText());
typeCount++;
}
break;
// 判断当前事件是否为标签元素结束事件
case XmlPullParser.END_TAG:
break;
}
// 进入下一个元素并触发相应事件
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
return todayWeather;
}
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences = getSharedPreferences("config", MODE_PRIVATE);
String cityCode = sharedPreferences.getString("main_city_code","101010100");
Log.d("myWeather",cityCode);
if(v.getId()==R.id.title_update)
{if(NetUtil.getNetworkState(this)==NetUtil.NETWORN_NONE)
{
Log.d("myWeather","网络挂了");
Toast.makeText(MainActivity.this,"网络挂了",Toast.LENGTH_LONG).show();
}
else
{
Log.d("myWeather","网络ok");
Toast.makeText(MainActivity.this,"网络ok",Toast.LENGTH_LONG).show();
queryWeatherCode(cityCode);
} }
// TODO Auto-generated method stub
}
public void initView()
{
//title
cityNameT = (TextView)findViewById(R.id.title_city);
//today weather
cityT = (TextView)findViewById(R.id.cityName);
timeT = (TextView)findViewById(R.id.updateTime);
humidityT = (TextView)findViewById(R.id.humidity);
weekT = (TextView)findViewById(R.id.week);
pmDataT = (TextView)findViewById(R.id.pm2_5num);
pmQualityT = (TextView)findViewById(R.id.pm2_5status);
temperatureT = (TextView)findViewById(R.id.temperature);
climateT = (TextView)findViewById(R.id.weatherState);
windT = (TextView)findViewById(R.id.wind);
weatherStateImg = (ImageView)findViewById(R.id.weatherStatusImg);
pmStateImg = (ImageView)findViewById(R.id.today_pm25img);
cityNameT.setText("N/A");
cityT.setText("N/A");
timeT.setText("N/A");
humidityT.setText("N/A");
weekT.setText("N/A");
pmDataT.setText("N/A");
pmQualityT.setText("N/A");
temperatureT.setText("N/A");
climateT.setText("N/A");
windT.setText("N/A");
}
public void updateTodayWeather(TodayWeather todayWeather)
{
cityNameT.setText(todayWeather.getCity()+"天气");
cityT.setText(todayWeather.getCity());
timeT.setText(todayWeather.getUpdatetime()+"发布");
humidityT.setText("湿度:"+todayWeather.getShidu());
pmDataT.setText(todayWeather.getPm25());
pmQualityT.setText(todayWeather.getQuality());
weekT.setText(todayWeather.getDate());
temperatureT.setText(todayWeather.getHigh()+"~"+todayWeather.getLow());
climateT.setText(todayWeather.getType());
windT.setText("风力:"+todayWeather.getFengli());
int pm25 = Integer.parseInt(todayWeather.getPm25());
if (pm25 <= 50) {
pmStateImg.setImageResource(R.drawable.biz_plugin_weather_0_50);
} else if (pm25 >= 51 && pm25 <= 100) {
pmStateImg.setImageResource(R.drawable.biz_plugin_weather_51_100);
} else if (pm25 >= 101 && pm25 <= 150) {
pmStateImg.setImageResource(R.drawable.biz_plugin_weather_101_150);
} else if (pm25 >= 151 && pm25 <= 200) {
pmStateImg.setImageResource(R.drawable.biz_plugin_weather_151_200);
} else if (pm25 >= 201 && pm25 <= 300) {
pmStateImg.setImageResource(R.drawable.biz_plugin_weather_201_300);
}
Log.d("type", todayWeather.getType());
switch (todayWeather.getType()) {
case "晴":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_qing);
break;
case "阴":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_yin);
break;
case "雾":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_wu);
break;
case "多云":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_duoyun);
break;
case "小雨":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_xiaoyu);
break;
case "中雨":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_zhongyu);
break;
case "大雨":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_dayu);
break;
case "阵雨":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_zhenyu);
break;
case "雷阵雨":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_leizhenyu);
break;
case "雷阵雨加暴":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_leizhenyubingbao);
break;
case "暴雨":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_baoyu);
break;
case "大暴雨":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_dabaoyu);
break;
case "特大暴雨":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_tedabaoyu);
break;
case "阵雪":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_zhenxue);
break;
case "暴雪":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_baoxue);
break;
case "大雪":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_daxue);
break;
case "小雪":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_xiaoxue);
break;
case "雨夹雪":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_yujiaxue);
break;
case "中雪":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_zhongxue);
break;
case "沙尘暴":
weatherStateImg.setImageResource(R.drawable.biz_plugin_weather_shachenbao);
break;
default:
break;
}
Toast.makeText(MainActivity.this,"更新成功",Toast.LENGTH_SHORT).show();
}
}