Android Volley框架使用(一)

Volley是Google推出的网络通信框架,支持快速的联网请求并自动缓存数据。本文介绍Volley的特点及如何使用它来实现字符串请求、JSON请求和图片请求,并展示了如何利用缓存数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Volley简介

2013年Google I/O大会上推出了一个新的网络通信框架——Volley。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。
有如下优点:
Volley优点:
1. 联网请求非常快,在轻量级(图片,字符串)的请求中冠军
2.自动缓存所有的数据
3.Volley避开了异步任务,开启子线程
4.开发中轻量级联网使用Volley

使用步骤

1.必须要有请求队列 RequestQueue,类似MessageQueue
请求队列作用: 管理请求 Volley 万箭齐发的作用(一次会发送多个请求)
需要管理者管理发出的请求

2.发起请求 ,StringRequest JsonObjectRequest,JsonArrayRequest ImageRequest
其实就是new一个请求

3.把创建的请求添加到请求队列中
无人驾驶模式 自定联网获取数据,自动缓存
Volley使用实例

首先在activity_main.xml中添加四个按钮:

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="btnStringRequest"
android:text="字符串请求"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="btnJsonRequest"
android:text="Json请求"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="btnImageRequest"
android:text="图片请求"/>
<ImageView
android:id="@+id/showImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="btnGetCacheData"
android:text="缓存数据"/>

字符串请求:

//  请求字符串
public void btnStringRequest(View view) {
//        2.发起请求
String url = "http://218.244.149.129:9010/api/companylist.php?";
StringRequest stringRequest = new StringRequest(Request.Method.POST, //参数1 请求方式
url //参数2 请求网址
, new Response.Listener<String>() {//联网成功回调
@Override
public void onResponse(String response) {

                Log.d("flag", "-------->respnse" + response);

}
        }, new Response.ErrorListener() {//联网失败的回调
@Override
public void onErrorResponse(VolleyError error) {

                Log.d("flag", "联网失败");

}
        }) {//告诉StringRequest参数,跟Handle类似,
            //          Volley进行POST请求传参的方式
@Override
protected Map<String, String> getParams() throws AuthFailureError {
                HashMap<String, String> map = new HashMap<String, String>();
//                向map中传入参数
//industryid=99&name=头条
map.put("industryid", "99");
//                如果多个参数,写法类似,一次添加就可以了


return map;
}
        };

//        3.添加请求到RequestQueue中
mRequestQueue.add(stringRequest);
}

Json请求:

//Json请求
public void btnJsonRequest(View view) {
//        2.创建Json请求
//String url = "http://mobile.ximalaya.com/m/category_tag_menu";
String url = "http://my2.chamanhua.com/manhuaapp/remoting/topic/queryTopicList";
//请求参数是JSONObject:object=android

JSONObject json = new JSONObject();
//有了对象以后旧可以添加数据

//对于淘宝类的App,服务器数据,商品数据完全一致
//服务器进行交互时,发的请求参数是JSON格式,服务器比较简单,JSON格式不容易错
//淘宝类的App数据量比较大,服务器要求客户端,格式要严格要求,不容易出错
try {
            json.put("object", "android");
} catch (JSONException e) {
            e.printStackTrace();
}
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, //请求方式
url,//请求网址
json,//请求的参数,请求参数JSONObject形式的数据 如果是GET请求 第三个参数可以为空
new Response.Listener<JSONObject>() {//请求成功回调
@Override
public void onResponse(JSONObject response) {
                        Toast.makeText(MainActivity.this, "请求数据成功", Toast.LENGTH_LONG).show();
Log.d("flag", "------->" + response.toString());
}
                }, new Response.ErrorListener() {//请求失败的回调
@Override
public void onErrorResponse(VolleyError error) {
                Toast.makeText(MainActivity.this, "请求数据失败", Toast.LENGTH_LONG).show();
Log.d("flag", "请求数据失败");
}
        });

//3添加到请求队列中
mRequestQueue.add(jsonObjectRequest);
}

图片请求:

//请求图片
public void btnImageRequest(View view) {
//2创建ImageRequest
ImageRequest imageRequest = new ImageRequest(mUrl,
                new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
if (response != null) {
  mImageView.setImageBitmap(response);
} else {
  mImageView.setImageResource(R.mipmap.ic_launcher);
}
                    }
                }, 300,//参数3请求回来的图片设置大小 宽,当宽度或者高度超过网络图片的大小,那么这个设置旧没意义
300,//参数4 高
ImageView.ScaleType.FIT_XY,//匹配设备的宽高
Bitmap.Config.RGB_565,//图片的decode规格
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
     Toast.makeText(MainActivity.this, "获取图片失败", Toast.LENGTH_LONG).show();
}
                });
//3 添加到请求队列中
//        设置TAG
imageRequest.setTag("image");
Request<Bitmap> request = mRequestQueue.add(imageRequest);
//        设置是否进行缓存 false不进行缓存
request.setShouldCache(false);
//        取消联网请求图片
mRequestQueue.cancelAll("image");
}

缓存数据:

//缓存数据
public void btnGetCacheData(View view) {
//管理者RequestQueue
//          1.获取缓存的对象
Cache cache = mRequestQueue.getCache();
//        2.获取缓存中数据
if (cache != null) {
//            获取数据
Cache.Entry entry = cache.get(mUrl);
//            数据肯定在entry中
if (entry != null) {
byte[] data = entry.data;

   if (data != null) {
   Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,     data.length);mImageView.setImageBitmap(bitmap);
}
            } else {
                Toast.makeText(this, "缓存中没有该数据", Toast.LENGTH_LONG).show();
}
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值