在Android Studio上使用GSON+VOLLEY,秒处理网络数据成集合。感受框架的力量。搭配RecyclerView和SwipeRefreshLayout,实现底端加载更多,下拉刷新。

【致谢,引用,声明,前言】

关于GSON和VOLLEY,我百度了很多资料,个人感觉有两篇博客介绍的特别好,附上链接咯:

  GSON: http://blog.csdn.net/lk_blog/article/details/7685169 

VOLLEY:http://blog.csdn.net/guolin_blog/article/details/17482165 .

使用的数据源url是根据徐大神在慕课网的视频里提到的url,不知道能不能在这里发,就不单独发了,反正会在代码出现的。

关于在Android Studio中导入jar包,貌似方法有很多,我导入VOLLEY和GSON是采用复制到lib目录下,然后右键->As a Library,选中自己的Module:

如图 (源自网络)


======================================================

【废话】

我这篇比较基础和入门,主要是融合了GSON VOLLEY搭配V7 V4 包里的RecyclerView和SwipeRefreshLayout,做一个简单的DEMO。实现加载网络数据,并显示。利用两个新控件做一个ListVIew的上下拉刷新的效果。

后续会不断的完善!欢迎各位提意见和BUG。

为什么要用Android Studio,就不用说了吧,好吧 我说一下,因为我最近在换工作,70%的公司都要求使用Android Stuido。不过其实AS用习惯了还是很爽的,我现在都不想在Eclipse上码代码了。

效果图:

======================================================

【构建实体类DataBean.java】

以前我加载网络数据一般会用到HttpUrlConnection,然后根据返回的InputStream,读取并处理成一串String数据(就是返回的json数据)。

然后再将这串String解析成JSONObject,再根据json的格式不断的解析JSONArray...JSONObject...,最终得到我们的目标数据集合List<DataBean> mDatas。

经常一个粗心就哪里写错了,而且代码重复量实在太大。利用GSON和VOLLEY,我只想说一句,秒         处理。

直接看代码:

首先是根据url返回的json,构建一个实体类: 我们这里返回的json格式为:

{
    "status": 1,
    "data": [
        {
            "id": 1,
            "name": "Tony老师聊shell——环境变量配置文件",
            "picSmall": "http://img.mukewang.com/55237dcc0001128c06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/55237dcc0001128c06000338.jpg",
            "description": "为你带来shell中的环境变量配置文件",
            "learner": 12312
        },
        {
            "id": 2,
            "name": "数学知识在CSS动画中的应用",
            "picSmall": "http://img.mukewang.com/55249cf30001ae8a06000338-300-170.jpg",
            "picBig": "http://img.mukewang.com/55249cf30001ae8a06000338.jpg",
            "description": "数学知识与CSS结合实现酷炫效果",
            "learner": 45625
        },

。。。。。。。。。

我们根据"data"数组里的数据格式,构建DataBean.java: (这个是跟GSON解析相关的)

package com.mcxtzhang.demo.windrecyclerdemo;

/**
 * Created by zhangxutong on 2015/12/28.
 */
public class DataBean {
    private String name;
    private String picSmall;

    public String getName() {
        return name;
    }

    public String getPicSmall() {
        return picSmall;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPicSmall(String picSmall) {
        this.picSmall = picSmall;
    }

  /*  @Override
    public String toString() {
        return "DataBean{" +
                "name='" + name + '\'' +
                ", picSmall='" + picSmall + '\'' +
                '}';
    }*/
}
这里说一个我自己当小白鼠验证出来的东西,经过测试,使用GSON,toString() 不是一定要写的,然后也不一定要写出json数据里的所有字段,只要根据需要就可以了,例如:我这里需要name和picSmall,则我的DataBean只有两个属性。

字段(属性)的命名,我是跟json数据里的字段保持一致的。OK,实体类构建完毕,继续。

======================================================

【使用VOLLEY】

下面就是使用VOLLEY了,请添加网络访问权限!请添加网络访问权限!请添加网络访问权限! 重要的事说三遍,有的同学没添加,不停的报错/运行结果不正确,

<uses-permission android:name="android.permission.INTERNET" />

然后,根据郭神blog所述,VOLLEY使用三部曲:

1. 创建一个RequestQueue对象。

//Volley begin
private RequestQueue mQueue;
private static final String url = "http://www.imooc.com/api/teacher?type=4&num=30";
//Volley end



2. 创建一个JsonRequest对象。 (摘自郭神blog,重点标红:类似于StringRequest,JsonRequest也是继承自Request类的,不过由于JsonRequest是一个抽象类,因此我们无法直接创建它的实例,那么只能从它的子类入手了。JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,从名字上你应该能就看出它们的区别了吧?一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。)

本例url返回的是JSONObject,所以用JsonObjectRequest对象。

//Volley begin
//GET 方式的http
/*StringRequest stringRequest = new StringRequest(url,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d(TAG, response);
            }
        }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e(TAG, error.getMessage(), error);
    }
});

mQueue.add(stringRequest);*/

//json 四个参数分别是:url, JSONObject对象这里为null,一个请求成功的Listener,和一个请求失败的Listener:
//
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject jsonObject) {
       // Log.i(TAG,jsonObject.toString());
        if(null!=jsonObject){
            try {
                //传入的"data" 是根据json返回字符串得来的
                JSONArray jsonArray = jsonObject.getJSONArray("data");
                //上一句代码可能报错,确认不报错再创建下面的对象
                //注释掉的是 原本不使用GSON的解析方法
                /*mDatas = new ArrayList<DataBean>();
                for (int i=0;i<jsonArray.length();i++){
                    JSONObject jsonData = jsonArray.getJSONObject(i);
                    DataBean data = new DataBean();
                    data.setName(jsonData .getString("name"));
                    data.setPicSmall(jsonData.getString("picSmall"));
                    mDatas.add(data);
                }*/

                //使用GSON加载 begin
                String dataString = jsonArray.toString();
                Gson gson = new Gson();
                mDatas = gson.fromJson(dataString, new TypeToken<List<DataBean>>() {}.getType());
                //使用GSON加载 end
                //数据加载完后 再加载适配器
                init();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError volleyError) {
        Log.i(TAG,volleyError.getMessage(),volleyError);
    }
});



3. 将JsonRequest对象添加到RequestQueue里面。

mQueue.add(jsonObjectRequest);
//Volley end

忽略init();里面是适配器的设置和下拉刷新的代码。这里不用care。

======================================================

【GSON】:

上述 步骤 2,里已经包括GSON的使用代码:

这里是将json数据转化为带泛型的List 集合。

private List<DataBean> mDatas
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值