volley非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。
下载地址
导入jar包就不说了
声明网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
基本步骤:
1.声明一个RequestQueue
2.创建一个StringRequest或则JsonRequest
3.将StringRequest(JsonRequest)添加到RequestQueue里
代码:
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);
上面我们用的是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;
}
};
同时我们需要从服务器获取数据,一般都是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);
效果: