Android学习记录,第七周

Android网络编程

一、网络请求:

网络请求常规步骤如下:
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会解析失败!

你可能感兴趣的:(Android学习记录,第七周)