Volley框架学习一

Volley网络请求与数据解析

volley非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

下载地址

接下来学习一下

导入jar包就不说了

声明网络权限:

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

基本步骤:
1.声明一个RequestQueue
2.创建一个StringRequest或则JsonRequest
3.将StringRequest(JsonRequest)添加到RequestQueue里

StringRequest

代码:
xml布局:

 <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />

获取百度首页HTML代码:

 text = (TextView)findViewById(R.id.text);

        RequestQueue requestQueue = Volley.newRequestQueue(this);

        StringRequest stringRequest = new StringRequest("http://www.baidu.com"
                , new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                text.setText(s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                text.setText("error");
            }
        });

        requestQueue.add(stringRequest);

效果:
1

上面我们用的是GET方式获取数据
但是我们经常是用POST方式传参到服务器,那么怎么表示POST方式和传参呢?
看下面,重写父类的方法:

 StringRequest stringRequest = new StringRequest(Request.Method.POST,"http://www.baidu.com"
                , new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                text.setText(s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                text.setText("error");
            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {

                Map<String,String> map = new HashMap<String,String>();
                map.put("param1","value1");
                map.put("param2","value2");
                return map;
            }
        };

JsonRequest

同时我们需要从服务器获取数据,一般都是Json格式的数据:
由于JsonRequest是一个抽象类,我们无法直接创建它的实例,所以只能从它的子类入手了。
JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,很明显,一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。

他们的用法和StringRequest差不多:

这里我们用一个淘宝的接口获取Json数据:
淘宝搜索鸡蛋的链接
解析出来:

{
    "result": [
        [
            "鸡蛋干",
            "67432"
        ],
        [
            "鸡蛋包装盒",
            "7021"
        ],
        [
            "鸡蛋杯",
            "17388"
        ],
        [
            "鸡蛋盒",
            "55365"
        ],
        [
            "鸡蛋果",
            "35760"
        ],
        [
            "鸡蛋仔机",
            "2332"
        ],
        [
            "鸡蛋托",
            "19395"
        ],
        [
            "鸡蛋包装",
            "34252"
        ],
        [
            "鸡蛋花",
            "33817"
        ],
        [
            "鸡蛋面",
            "38737"
        ]
    ],
    "cat": [
        [
            "水果蔬菜/水产肉类/熟食",
            "50108542",
            "鸡蛋"
        ]
    ]
}

程序:

 RequestQueue requestQueue = Volley.newRequestQueue(this);

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(URL, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {
                text.setText(jsonObject.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                text.setText("Json Error");
            }
        });

        requestQueue.add(jsonObjectRequest);

效果:

2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值