Android Volley教程:发布并下载图像

本文详细介绍了Android库Volley的使用,包括其优势、核心组件、发布POST请求、下载二进制数据(如图像)以及如何自定义请求。Volley提供高效的网络管理、请求队列、内存和磁盘缓存,简化了网络操作,增强了应用性能。
摘要由CSDN通过智能技术生成

在这篇文章中,我想描述如何使用非常强大且易于使用的Android库。 该库称为Volley ,可用于处理网络连接。 在上一篇文章中,我们讨论了HttpUrlConnection和Apache HTTP客户端。 它们既有效又有用,但是使用Volley,我们可以简化工作。 Volley是一个库,我们可以使用git下载它: git clone

  • https://android.googlesource.com/platform/frameworks/volley

一旦获得代码,就可以构建我们的项目。 如果您发现下载的代码适用于Android Studio。 如果要将其移至Eclipse,这非常简单。 不要忘记将项目设置为库。

为什么要使用Volley?

好吧,我们可能会问,如果我们已经拥有处理网络连接(即Http连接)所需的一切,为什么我们需要使用另一个库。 好吧,如果您阅读了以前的文章,我们注意到我们需要做一些工作:例如,我们必须创建一个AsyncTask,处理网络连接错误等等。 Volley简化了一切并提高了应用程序的性能。 凌空给我们:

  • 高效的网络管理
  • 易于使用的请求管理
  • 磁盘和内存缓存管理
  • 易于扩展和定制以满足我们的需求

这些点足以选择Volley作为我们的基础网络库。 在这篇文章中,我将展示Volley的一些基本操作,而在另一些文章中,我将展示一些其他的“复杂”操作。

凌空核心

当我们使用Volley时,有些类起着重要的作用,很可能它们是我们将更经常使用的类。 这些类是:

  • 请求队列
  • 请求
  • 响应
  • 一些有用的类可以简化我们的工作(工具箱包)

RequestQueue是Volley lib的核心类,它处理我们在应用程序中发出的所有请求。 它负责对请求进行排队并处理响应。 通常,我们创建此类的实例,调用:

RequestQueue rq = Volley.newRequestQueue(this);

此代码行仅创建带有默认参数的RequestQueue实例。 如果我们想拥有更多控制权,可以直接实例化此类。 一旦有了请求队列实例,就可以添加请求。 网络请求是Request类的实例。 通常,我们在工具箱包下拥有所需的一切,但是我们始终可以自定义扩展Request类的请求并提供逻辑。 响应类是我们要侦听响应数据或错误事件时使用的类。

我们将在后面详细介绍。 如果没有特殊需要,可以在工具箱包中使用一些类。 这些类有助于我们处理常见的请求:例如字符串请求和图像请求。

发布请求

通常,我们最常提出的请求之一就是POST请求,我们在其中向远程服务器发送一些参数。 在这种情况下,我们可以使用StringRequest,因为我们希望发送数据字符串并接收字符串响应。 因此,我们有:

RequestQueue rq = Volley.newRequestQueue(this);
StringRequest postReq = new StringRequest(Request.Method.POST, "http://httpbin.org/post", new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        tv.setText(response); // We set the response data in the TextView
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        System.out.println("Error ["+error+"]");

    }
}) ;

在第1行,我们创建一个请求队列处理程序。 在第2行,我们实例化StringRequest。 您可能会注意到该代码看起来有点过于复杂,但是它非常简单。 首先,我们指定此请求为POST请求,然后指定目标网址( http://httpbin.org )。 查看代码,您会注意到我们有两个不同的侦听器:

  • 响应监听器
  • Response.ErrorListener

当收到响应并准备好响应时,将调用第一个响应。 在这种情况下,将调用onResponse方法。 此方法在主线程中运行,因此我们可以更新例如一些UI wigtes。 如果出现问题,则调用ErrorListener.onErrorResponse。 通过这种方法,我们有机会处理错误并将其通知给用户。

到目前为止,我们尚未发送任何参数。 如果要向远程服务器发布一些数据,则必须重写getParams方法。 在Request类中,getParams是一个返回null的方法。 如果要发布一些参数,则必须返回一个具有键值对的Map。 在这种情况下,我们可以重写此方法:

RequestQueue rq = Volley.newRequestQueue(this);

StringRequest postReq = new StringRequest(.....)  {

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> params = new HashMap<String, String>();

        params.put("param1", param);
        return params;
    }

};

在这种情况下,我们创建一个名为param1的键,并传递存储在param参数中的值。 最后,我们需要将我们的请求添加到请求队列中。

rq.add(postReq);

运行代码,我们有:

android_volley_post4

下载二进制数据:图像

如果我们要下载二进制数据怎么办? 好吧,如果我们想从远程服务器下载图像,可以使用ImageRequest。 在这种情况下,我们有:

ImageRequest ir = new ImageRequest(url, new Response.Listener<Bitmap>() {

    @Override
    public void onResponse(Bitmap response) {
        iv.setImageBitmap(response);

    }
}, 0, 0, null, null);

和以前一样,在onResponse方法中,我们设置从远程服务器接收的图像(第4行)。 我们可以设置图像的宽度和高度以及其他参数。 在这种情况下,我们没有实现错误监听器。 在这种情况下,我们有:

android_volley_download_image9

自订要求

如前所述,我们可以扩展基本Request类,以便实现逻辑。 在这种情况下,我们将覆盖两个方法:

  • parseNetworkResponse
  • deliveryResponse

在第一种方法中,我们必须从响应中提取数据,而在另一种方法中,我们要通知响应。 我们将在其他一些文章中介绍这些方面。

  • 源代码即将发布。

参考: Android Volley教程:通过我们的JCG合作伙伴 Francesco Azzola在Surviving w / Android博客上发布和下载图像

翻译自: https://www.javacodegeeks.com/2013/11/android-volley-tutorial-post-and-download-image.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值