json无外乎是一种键值对存储、传递格式。
1、解析json格式文件
格式化网站
http://www.bejson.com/
{
"desc": "OK",
"status": 1000,
"data": {
"wendu": "18",
"ganmao": "昼夜温差很大,易发生感冒,请注意适当增减衣服,加强自我防护避免感冒。",
"forecast": [
{
"fengxiang": "无持续风向",
"fengli": "微风级",
"high": "高温 22℃",
"type": "阴",
"low": "低温 17℃",
"date": "21日星期一"
},
{
"fengxiang": "北风",
"fengli": "微风级",
"high": "高温 17℃",
"type": "小雨",
"low": "低温 8℃",
"date": "22日星期二"
},
{
"fengxiang": "北风",
"fengli": "微风级",
"high": "高温 10℃",
"type": "小雨",
"low": "低温 6℃",
"date": "23日星期三"
},
{
"fengxiang": "无持续风向",
"fengli": "微风级",
"high": "高温 9℃",
"type": "多云",
"low": "低温 6℃",
"date": "24日星期四"
},
{
"fengxiang": "无持续风向",
"fengli": "微风级",
"high": "高温 10℃",
"type": "小雨",
"low": "低温 8℃",
"date": "25日星期五"
}
],
"yesterday": {
"fl": "微风",
"fx": "无持续风向",
"high": "高温 21℃",
"type": "小雨",
"low": "低温 17℃",
"date": "20日星期日"
},
"city": "丰城"
}
}
2、建立相关的javabean用来封装数据
public class WeatherBean {
@Override
public String toString() {
return "bean" + getDesc() + "WeatherData "
+ new WeatherData().toString();
}
public String desc;
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
class WeatherData {
@Override
public String toString() {
return "WeatherData [wendu=" + wendu + ", ganmao=" + ganmao
+ ", forecast_data_list=" + forecast_data_list
+ ",yesterday " + yesterday.result() + "city=" + city + "]";
}
public WeatherData() {
}
public WeatherData(String wendu, String ganmao,
ArrayList<Forecast> forecast_data_list, Yesterday yesterday,
String city) {
this.wendu = wendu;
this.ganmao = ganmao;
this.forecast_data_list = forecast_data_list;
this.city = city;
this.yesterday = yesterday;
}
public String getWendu() {
return wendu;
}
public void setWendu(String wendu) {
this.wendu = wendu;
}
public String getGanmao() {
return ganmao;
}
public void setGanmao(String ganmao) {
this.ganmao = ganmao;
}
public ArrayList<Forecast> getForecast_data_list() {
return forecast_data_list;
}
public void setForecast_data_list(ArrayList<Forecast> forecast_data_list) {
this.forecast_data_list = forecast_data_list;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String wendu;
public String ganmao;
private Yesterday yesterday;
public ArrayList<Forecast> forecast_data_list = new ArrayList<Forecast>();
public class Forecast {
@Override
public String toString() {
return "Forecast [fengxiang=" + fengxiang + ", fengli="
+ fengli + ", high=" + high + ", type=" + type
+ ", low=" + low + ", date=" + date + "]";
}
public Forecast(String fengxiang, String fengli, String high,
String type, String low, String date) {
this.fengxiang = fengxiang;
this.fengli = fengli;
this.high = high;
this.type = type;
this.low = low;
this.date = date;
}
public String getFengxiang() {
return fengxiang;
}
public void setFengxiang(String fengxiang) {
this.fengxiang = fengxiang;
}
public String getFengli() {
return fengli;
}
public void setFengli(String fengli) {
this.fengli = fengli;
}
public String getHigh() {
return high;
}
public void setHigh(String high) {
this.high = high;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getLow() {
return low;
}
public void setLow(String low) {
this.low = low;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String fengxiang;
public String fengli;
public String high;
public String type;
public String low;
public String date;
}
class Yesterday {
public Yesterday(String fl, String fx, String high, String type,
String low, String date) {
this.fl = fl;
this.fx = fx;
this.high = high;
this.type = type;
this.low = low;
this.date = date;
}
public String getFl() {
return fl;
}
public void setFl(String fl) {
this.fl = fl;
}
public String getFx() {
return fx;
}
public void setFx(String fx) {
this.fx = fx;
}
public String getHigh() {
return high;
}
public void setHigh(String high) {
this.high = high;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getLow() {
return low;
}
public void setLow(String low) {
this.low = low;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String fl;
public String fx;
public String high;
public String type;
public String low;
public String date;
public String result() {
return "YesterDay : " + getFl() + " " + getFx() + " "
+ getHigh() + " " + getType() + " " + getLow() + " "
+ getDate();
}
}
public String city;
}
}
3、xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/et_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入查询城市" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="查询" />
<ScrollView android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_weather"/>
</ScrollView>
</LinearLayout>
4、解析
public class WeatherActivity extends Activity {
private EditText et_city;
private TextView tv;
private String path = "http://wthrcdn.etouch.cn/weather_mini?city=";
protected static final int SUCCESS = 0;
protected static final int FAIL = 1;
private static final int NO_CITY = 2;
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case SUCCESS:
tv.setText((String) msg.obj);
break;
case FAIL:
Toast.makeText(WeatherActivity.this, "网络请求失败",
Toast.LENGTH_LONG).show();
break;
case NO_CITY:
Toast.makeText(WeatherActivity.this, "网络请求失败",
Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
;
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_weather);
et_city = (EditText) findViewById(R.id.et_city);
tv = (TextView) findViewById(R.id.tv_weather);
}
public void click(View view) {
final String city = et_city.getText().toString().trim();
if (TextUtils.isEmpty(city)) {
Toast.makeText(this, "请输入城市", Toast.LENGTH_SHORT).show();
return;
}
new Thread() {
public void run() {
try {
path = path + URLEncoder.encode(city, "utf-8");
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestMethod("GET");
if (connection.getResponseCode() == 200) {
InputStream stream = connection.getInputStream();
String text = streamToString(stream);
stringToJson(text);
Message msg = Message.obtain();
msg.obj = text;
msg.what = SUCCESS;
handler.sendMessage(msg);
}
} catch (Exception e) {
// TODO Auto-generated catch block
Message msg = Message.obtain();
msg.what = FAIL;
handler.sendMessage(msg);
}
};
}.start();
}
/**
* 将输入流转成String
*
* @param is
* @return
*/
private String streamToString(InputStream is) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = 0;
byte[] b = new byte[1024];
try {
while ((len = is.read(b)) != -1) {
baos.write(b, 0, len);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return baos.toString();
}
/**
* 解析json数据
* @param text
* @throws Exception
*/
private void stringToJson(String text) throws Exception {
// 将String类型转换成json
JSONObject jsonObject = new JSONObject(text);
if ("OK".equals(jsonObject.getString("desc"))) {
WeatherBean weatherBean = new WeatherBean();
JSONObject data = jsonObject.getJSONObject("data");
String wendu = data.getString("wendu");
String ganmao = data.getString("ganmao");
WeatherData weatherData = weatherBean.new WeatherData();
// 封装至list中
JSONArray forecast = data.getJSONArray("forecast");
ArrayList<Forecast> forecast_data_list = new ArrayList<Forecast>();
for (int i = 0; i < forecast.length(); i++) {
JSONObject object = forecast.getJSONObject(i);
String fengxiang = object.getString("fengxiang");
String fengli = object.getString("fengli");
String high = object.getString("high");
String low = object.getString("low");
String date = object.getString("date");
String type = object.getString("type");
Forecast forecastbean = weatherData.new Forecast(fengxiang,fengli, high, type, low, date);
forecast_data_list.add(forecastbean);
}
String city = data.getString("city");
JSONObject object = data.getJSONObject("yesterday");
String f1 = object.getString("fl");
String fx = object.getString("fx");
String high = object.getString("high");
String type = object.getString("type");
String low = object.getString("low");
String date = object.getString("date");
Yesterday yesterday = weatherData.new Yesterday(f1, fx, high, type, low, date);
WeatherBean.WeatherData wd = weatherBean.new WeatherData(wendu, ganmao, forecast_data_list, yesterday, city);
System.out.println(wd.toString());
} else {
// 城市无效
Message msg = Message.obtain();
msg.what = NO_CITY;
handler.sendMessage(msg);
}
}
}
访问网络权限
<!-- 网络 -->
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
封装后信息输出