Android开源框架Volley的使用

一、概述
Volley是google发布的一款android网络通信库,它适合效率要求较高场景以及并发场景。它有如下特点:

  • 通信更快、更简单、更健壮。开发效率会得到很大提升,稳定性也会很高。
  • GET、POST请求及网络图像的高效率异步处理
  • 可以对网络请求进行排序和优先级处理。
  • 网络请求的缓存。
  • 多级别取消请求。
  • 和Activity生命周期的联动。当activity销毁时,可通过
  • 不适合网络数据的上传和下载

二、网络数据请求

首先,要自定义一个Application,初始化一个Volley请求队列。并将Application注册到manifest文件中。还要添加网络权限。

public class MyApplication extends Application {
    public static RequestQueue queue;
    @Override
    public void onCreate() {
        super.onCreate();
        queue = Volley.newRequestQueue(getApplicationContext());
    }

    public static RequestQueue getHttpQueue() {
        return queue;
    }
}
  • StringRequest
//POST请求
private void volleyPost() {
        String url = "";
        StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                //请求成功的操作
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                //请求失败的操作
            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> hashMap = new HashMap<String, String>();
                hashMap.put("phone", "13838383838");
                hashMap.put("key", "sbsbsbsb");
                return hashMap;
            }
        };
        request.setTag("abcPost");
        MyApplication.getHttpQueues().add(request);
//GET请求
private void volleyGet() {
       String url = "http://.......?phone=13838383838&key=sbsbsbsbsb";
        //1.String
        StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_SHORT).show();
            }
        });
        request.setTag("abcGet");
        MyApplication.getHttpQueues().add(request);
  • JsonObjectRequest
//POST
HashMap<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("phone", "13838383838");
        hashMap.put("key", "sbsbsbsb");
        JSONObject object = new JSONObject(hashMap);
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, object, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });
        request.setTag("abcPost");
        MyApplication.getHttpQueues().add(request);
//GET
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {
                //请求成功的操作
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                // 请求失败的操作
            }
        });
        request.setTag("abcGet");
        MyApplication.getHttpQueues().add(request);
  • JsonArrayRequest

和JsonObjectRequest大同小异,略。

三、获取网络图片

首先做一下准备工作。。。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/iv_img"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/net_iv"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"/>

</RelativeLayout>
//去manifest.xml中注册和添加权限
public class MyApplication extends Application {
    public static RequestQueue queue;
    @Override
    public void onCreate() {
        super.onCreate();
        queue = Volley.newRequestQueue(getApplicationContext());
    }

    public static RequestQueue getHttpQueue() {
        return queue;
    }
}
iv_img = (ImageView) this.findViewById(R.id.iv_img);
networkIv = (NetworkImageView) this.findViewById(R.id.net_iv);
String url = "http://www.baidu.com/img/bdlogo.png";
/**
 * 使用ImageRequest请求网络图片
 */
mageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
       @Override
     public void onResponse(Bitmap bitmap) {
          iv_img.setImageBitmap(bitmap);
     }
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
     @Override
     public void onErrorResponse(VolleyError volleyError) {
         iv_img.setBackgroundResource(R.mipmap.ic_launcher);
     }
});
MyApplication.getHttpQueue().add(request);
/**
 * 使用ImageLoader缓存网络图片
 */
 ImageLoader loader = new ImageLoader(MyApplication.getHttpQueue(), new BitmapCache());
        ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv_img, R.mipmap.ic_launcher,
                R.mipmap.ic_launcher);
        loader.get(url, listener);
public class BitmapCache implements ImageLoader.ImageCache {
    public LruCache<String, Bitmap> cache;
    public int max = 10 * 1024 * 1024; //设置最大缓存大小

    public BitmapCache() {
        cache = new LruCache<String, Bitmap>(max) {
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getRowBytes() * value.getHeight();
            }
        };
    }

    @Override
    public Bitmap getBitmap(String s) {
        return cache.get(s);
    }

    @Override
    public void putBitmap(String s, Bitmap bitmap) {
        cache.put(s, bitmap);
    }
}
/**
 * 使用NetworkImageView加载网络图片
 */
 ImageLoader loader = new ImageLoader(MyApplication.getHttpQueue(), new BitmapCache());
        networkIv.setDefaultImageResId(R.mipmap.ic_launcher);
        networkIv.setErrorImageResId(R.mipmap.ic_launcher);
        networkIv.setImageUrl(url, loader);

NetWorkResponse类

/**
 * Data and headers returned from {@link Network#performRequest(Request)}.
 */
public class NetworkResponse {
    /**
     * Creates a new network response.
     * @param statusCode the HTTP status code
     * @param data Response body
     * @param headers Headers returned with this response, or null for none
     * @param notModified True if the server returned a 304 and the data was already in cache
     * @param networkTimeMs Round-trip network time to receive network response
     */
    public NetworkResponse(int statusCode, byte[] data, Map<String, String> headers,
            boolean notModified, long networkTimeMs) {
        this.statusCode = statusCode;
        this.data = data;
        this.headers = headers;
        this.notModified = notModified;
        this.networkTimeMs = networkTimeMs;
    }

    public NetworkResponse(int statusCode, byte[] data, Map<String, String> headers,
            boolean notModified) {
        this(statusCode, data, headers, notModified, 0);
    }

    public NetworkResponse(byte[] data) {
        this(HttpStatus.SC_OK, data, Collections.<String, String>emptyMap(), false, 0);
    }

    public NetworkResponse(byte[] data, Map<String, String> headers) {
        this(HttpStatus.SC_OK, data, headers, false, 0);
    }

    /** The HTTP status code. */
    public final int statusCode;

    /** Raw data from this response. */
    public final byte[] data;

    /** Response headers. */
    public final Map<String, String> headers;

    /** True if the server returned a 304 (Not Modified). */
    public final boolean notModified;

    /** Network roundtrip time in milliseconds. */
    public final long networkTimeMs;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio 中,Volley 是一个用于网络通信的库,它能够帮助我们简化网络请求的操作,并且提高网络请求的效率。Volley 库主要使用了以下几个文件: 1. Request 类:这是 Volley 中最重要的类之一,它用于封装网络请求的信息,包括请求的 URL、请求方式、请求参数等。在 Volley 中,可以通过继承 Request 类来实现不同类型的网络请求,例如 StringRequest、JsonObjectRequest 等。 2. RequestQueue 类:这是一个请求队列,用于管理所有的网络请求。在 Volley 中,可以通过创建一个 RequestQueue 对象,并将网络请求添加到该队列中来执行网络请求。 3. Response 类:这是一个响应类,用于保存网络请求的响应结果。在 Volley 中,可以通过监听器来获取网络请求的响应结果,并在 Response 类中进行处理。 4. Cache 类:这是一个缓存类,用于缓存网络请求的响应结果。在 Volley 中,可以通过设置一个 Cache 对象来实现对网络请求结果的缓存。 除了以上常用的类之外,Volley 还提供了很多其他的工具类和接口,如 ImageLoader、NetworkImageView 等,用于实现网络图片的加载和显示。 总之,Volley 是一个非常强大和实用的网络通信库,它能够帮助我们更加方便地进行网络请求,并且提高网络请求的效率。如果在 Android 应用中需要进行网络通信,建议优先考虑使用 Volley 库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值