在这篇文章中,我想描述如何使用非常强大且易于使用的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);
运行代码,我们有:
下载二进制数据:图像
如果我们要下载二进制数据怎么办? 好吧,如果我们想从远程服务器下载图像,可以使用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行)。 我们可以设置图像的宽度和高度以及其他参数。 在这种情况下,我们没有实现错误监听器。 在这种情况下,我们有:
自订要求
如前所述,我们可以扩展基本Request类,以便实现逻辑。 在这种情况下,我们将覆盖两个方法:
- parseNetworkResponse
- deliveryResponse
在第一种方法中,我们必须从响应中提取数据,而在另一种方法中,我们要通知响应。 我们将在其他一些文章中介绍这些方面。
- 源代码即将发布。
翻译自: https://www.javacodegeeks.com/2013/11/android-volley-tutorial-post-and-download-image.html