网络请求常规步骤如下:
1、先创建一个URL对象:
URL url = new URL(http://www.baidu.com);
2、开启连接对象,获得HttpURLConnection对象:
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
3、设置这个链接对象的各种属性:
httpURLConnection.setRequestMethod("GET");
//设置请求头
httpURLConnection.setRequestProperty(APIKEY, MY_API_KEY);
httpURLConnection.setConnectTimeout(20000);
4、开始连接,并获取返回的数据流
httpURLConnection.connect();
InputStream inputStream = httpURLConnection.getInputStream();
PS:在获取网络数据前,可以先用httpURLConnection.getResponseCode()来获得返回码,当其返回值为200时,表示网络连接成功。
httpURLConnection.connect();
if(httpURLConnection.getResponseCode() == 200){
InputStream inputStream = httpURLConnection.getInputStream();
}
常用的返回数据分为XML和JSON数据类型。
这里我们先进行JSON数据的解析。常用的JSON有以下几种:
1、JSONObject解析JSON,解析例子如下:
{
"HeWeather":
[ { "aqi": { "city": { "aqi": "29", "co": "0", "no2": "23", "o3": "74", "pm10": "29", "pm25": "25", "qlty": "优", "so2": "2" } } }, { "daily_forecast":"27-35" } ] }
如上是一个JSON数据格式,在数据格式中,一对大括号包裹的内容是一个JSONObject,一对中括号包裹的内容是一个JSONArray。若想获取上述JSON数据中的no2字段的数据,则如下:
JSONObject jsonObject = new JSONObject(weatherJSON);
JSONArray jsonArray = jsonObject.getJSONArray("HeWeather");
JSONObject jsonObject1 = (JSONObject) jsonArray.get(0);
JSONObject jsonObject2 = jsonObject1.getJSONObject("aqi");
JSONObject jsonObject3 = jsonObject2.getJSONObject("city");
String no2 = jsonObject3.getString("no2");
2、用GSON来解析JSON。
GSON解析JSON非常简单,GSON建立一个对应JSON各个字段的对应类来记录JSON内的数据,JSON数据如上不变,则建立的对应类为:
public class TestGSONBean {
private List<HeWeatherBean> HeWeather;
public static class HeWeatherBean{
private String daily_forecast;
private AqiBean aqi;
public static class AqiBean{
private CityBean city;
public static class CityBean{
private String aqi;
private String co;
private String no2;
private String o3;
private String pm10;
private String pm25;
private String qlty;
private String so2;
}
}
}
}
注意:类里的每个字段名称需与JSON中的字段名称一一对应!否则无法解析数据。
在创建其解析对象后,再如下:
Gson gson = new Gson();
TestGSONBean testGSONBean = gson.fromJson(JSONString, TestGSONBean.class);
这里的fromJson就是将Json中数据一一对应写入对应的TestGSONBean对象中。再在TestGSONBean中写入各种get和set方法就可以获得相应数据。
吐血推荐:GSONformat插件超级好用~,直接将JSON数据复制进其对话框,GSONformat就会帮忙创建对应的对应类!免去自己创建类的烦恼。
PS:在GSONformat中,JSON类名不能有空格、. 等奇怪的符号,否则GSONformat会解析失败!