import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Map<String,String> map;
private List<Map<String,String>> list;
private String temp,weather,name,pm,wind;
private TextView tvCity;
private TextView tvWeather;
private TextView tvTemp;
private TextView tvWind;
private TextView tvPm;
private ImageView ivIcon;
private List<Weatherinfo> weatherInfos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
try {
InputStream is =this.getResources().openRawResource(R.raw.weather1);
weatherInfos = WeatherService.getInfoFromXML(is);
list = new ArrayList<Map<String,String>>();
for (Weatherinfo info : weatherInfos){
map = new HashMap<String, String>();
map.put("temp",info.getTemp());
map.put("weather",info.getWeather());
map.put("name",info.getName());
map.put("pm",info.getPm());
map.put("wind",info.getWind());
list.add(map);
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this,"解析信息失败",Toast.LENGTH_SHORT).show();
}
getMap(1,R.drawable.sun);
}
private void getMap(int number, int iconNumber) {
Weatherinfo weatherinfo = weatherInfos.get(number);
String temp = weatherinfo.getTemp();
String name = weatherinfo.getName();
String weather = weatherinfo.getWeather();
String pm = weatherinfo.getPm();
String wind = weatherinfo.getWind();
tvCity.setText(name);
tvPm.setText("pm :"+pm);
tvTemp.setText(temp);
tvWind.setText("风力 :"+wind);
tvCity.setText(name);
tvWeather.setText(weather);
ivIcon.setImageResource(iconNumber);
/* Map cityMap = list.get(number);
temp = cityMap.get("temp");
weather = cityMap.get("weather");
name = cityMap.get("name");
pm = cityMap.get("pm");
wind = cityMap.get("wind");
tvCity.setText(name);
tvWeather.setText(weather);
tvTemp.setText(""+temp);
tvWind.setText("风力 :"+wind);
tvPm.setText("pm :"+pm);
ivIcon.setImageResource(iconNumber);*/
}
private void initView() {
tvCity = (TextView) findViewById(R.id.tv_city);
tvWeather = (TextView) findViewById(R.id.tv_weather);
tvTemp = (TextView) findViewById(R.id.tv_temp);
tvWind = (TextView) findViewById(R.id.tv_wind);
tvPm = (TextView) findViewById(R.id.tv_pm);
ivIcon = (ImageView) findViewById(R.id.iv_icon);
findViewById(R.id.btn_sh).setOnClickListener(this);
findViewById(R.id.btn_bj).setOnClickListener(this);
findViewById(R.id.btn_gz).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_sh:
getMap(0,R.drawable.cloud_sun);
break;
case R.id.btn_bj:
getMap(1,R.drawable.sun);
break;
case R.id.btn_gz:
getMap(2,R.drawable.clouds);
break;
}
}
}
MainActivity.java
import android.util.Xml;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
/**
* create by hxc
*/
public class WeatherService {
//解析XML文件
public static List<Weatherinfo> getInfoFromXML(InputStream is) throws XmlPullParserException, IOException {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "UTF-8");
Weatherinfo weatherinfo = null;
List<Weatherinfo> weatherinfos = null;
//获取当前的类型
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
if ("infos".equals(parser.getName())) {
weatherinfos = new ArrayList<Weatherinfo>();
} else if ("city".equals(parser.getName())) {
weatherinfo = new Weatherinfo();
String idStr = parser.getAttributeValue(0);
weatherinfo.setId(idStr);
} else if ("temp".equals(parser.getName())) {
String temp = parser.nextText();
weatherinfo.setTemp(temp);
} else if ("weather".equals(parser.getName())) {
String weather = parser.nextText();
weatherinfo.setWeather(weather);
} else if ("name".equals(parser.getName())) {
String name = parser.nextText();
weatherinfo.setName(name);
} else if ("pm".equals(parser.getName())) {
String pm = parser.nextText();
weatherinfo.setPm(pm);
} else if ("wind".equals(parser.getName())) {
String wind = parser.nextText();
weatherinfo.setWind(wind);
}
break;
case XmlPullParser.END_TAG:
if ("city".equals(parser.getName())) {
weatherinfos.add(weatherinfo);
weatherinfo = null;
}
break;
}
type = parser.next();
}
return weatherinfos;
}
public static List<Weatherinfo> getInfosFromJson(InputStream is) throws IOException{
byte[] buffer = new byte[is.available()];
is.read(buffer);
String json = new String(buffer,"utf-8");
//使用Gson库解析JSON数据
Gson gson = new Gson();
Type listType = new TypeToken<List<Weatherinfo>>(){}.getType();
List<Weatherinfo> weatherinfos = gson.fromJson(json,listType);
return weatherinfos;
}
}
WeatherService.java
<?xml version="1.0" encoding="utf-8"?>
<infos>
<city id="sh">
<temp>20"C/30C</ temp>
<weather>晴转多云</weather>
<name>上海</name>
<pm>80</pm>
<wind>1级</wind>
</city>
<city id="bj">
<temp>26C/32"C</temp>
<weather>晴</weather>
<name>北京</name>
<pm>98</pm>
<wind>3级</wind>
</city>
<city id="gz">
<temp>15'C/24C</ temp>
<weather>多云</weather>
<name>广州</ name>
<pm>30</pm>
<wind>5级</wind>
</city>
</infos>
weather.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/weather"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/tv_weather"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/tv_weather"
android:layout_marginTop="39dp"
android:text="上海"
android:textSize="50sp"/>
<ImageView
android:id="@+id/iv_icon"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_alignLeft="@+id/ll_btn"
android:layout_alignStart="@+id/ll_btn"
android:layout_below="@+id/tv_city"
android:layout_marginLeft="44dp"
android:layout_marginStart="44dp"
android:layout_marginTop="42dp"
android:paddingBottom="5dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/tv_weather"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/iv_icon"
android:layout_below="@+id/iv_icon"
android:layout_marginRight="15dp"
android:layout_marginTop="18dp"
android:gravity="center"
android:text="多云"
android:textSize="18sp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/iv_icon"
android:layout_marginLeft="39dp"
android:layout_marginStart="39dp"
android:layout_toEndOf="@+id/iv_icon"
android:layout_toRightOf="@+id/iv_icon"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical"
android:text="-7℃"
android:textSize="22sp"/>
<TextView
android:id="@+id/tv_wind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="风力:3级"
android:textSize="18sp"/>
<TextView
android:id="@+id/tv_pm"
android:layout_width="73dp"
android:layout_height="wrap_content"
android:text="pm"
android:textSize="18sp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:orientation="horizontal">
<Button
android:id="@+id/btn_bj"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="北京"/>
<Button
android:id="@+id/btn_sh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上海"/>
<Button
android:id="@+id/btn_gz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="广州"/>
</LinearLayout>
</RelativeLayout>
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/weather"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/tv_weather"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/tv_weather"
android:layout_marginTop="39dp"
android:text="上海"
android:textSize="50sp"/>
<ImageView
android:id="@+id/iv_icon"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_alignLeft="@+id/ll_btn"
android:layout_alignStart="@+id/ll_btn"
android:layout_below="@+id/tv_city"
android:layout_marginLeft="44dp"
android:layout_marginStart="44dp"
android:layout_marginTop="42dp"
android:paddingBottom="5dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/tv_weather"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/iv_icon"
android:layout_below="@+id/iv_icon"
android:layout_marginRight="15dp"
android:layout_marginTop="18dp"
android:gravity="center"
android:text="多云"
android:textSize="18sp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/iv_icon"
android:layout_marginLeft="39dp"
android:layout_marginStart="39dp"
android:layout_toEndOf="@+id/iv_icon"
android:layout_toRightOf="@+id/iv_icon"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical"
android:text="-7℃"
android:textSize="22sp"/>
<TextView
android:id="@+id/tv_wind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="风力:3级"
android:textSize="18sp"/>
<TextView
android:id="@+id/tv_pm"
android:layout_width="73dp"
android:layout_height="wrap_content"
android:text="pm"
android:textSize="18sp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:orientation="horizontal">
<Button
android:id="@+id/btn_bj"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="北京"/>
<Button
android:id="@+id/btn_sh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上海"/>
<Button
android:id="@+id/btn_gz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="广州"/>
</LinearLayout>
</RelativeLayout>