Volley的特点:
|
Volley的使用:
1.Volley网络请求队列建立与取消队列请求
使用Volley需要建立一个全局的请求队列,这样就可以讲一个请求加入到这个全局队列中,并管理整个app的所有请求。 |
2.Volley的Get和Post请求方式的使用
Volley的Get和Post请求方式其实是对Android原生Get和Post请求方式进行了二次封装,对效率等进行优化。在使用Get和Post请求方式之前,我们要确定所请求的数据返回什么对象,Volley自带了三种返回类型:
StringRequest :主要使用在对请求数据的返回类型不确定的情况下,StringRequest涵盖了JsonObjectRequest和JsonArrayRequest。
JsonObjectRequest :当确定请求数据的返回类型为JsonObject时使用。
JsonArrayRequest :当确定请求数据的返回类型为JsonArray时使用。
|
3.Volley与Activity生命周期的联动
简单来说就是Volley中的请求是与Activity的生命周期进行关联。这样可以在Android销毁时关闭Volley的请求,防止请求在后台运行造成内存溢出等情况发生。与Activity生命周期进行联动时需要设置Tag标签,因为取消请求需要在请求队列中通过Tag标签进行查找,在Activity的onStop中执行取消请求的操作。 |
Volley网络请求的演示:
使用Volley时,需要导入Volley的jar包。在Android Studio中可以在Builder.gradle中加入
compile 'com.mcxiaoke.volley:library:1.0.19'
首先,创建一个Application用于创建一个全局的请求队列:代码如下所示:
public class MyApplication extends Application {
public static String TAG ; private static MyApplication myApplication; public static MyApplication newInstance() { return myApplication; } @Override public void onCreate() { super.onCreate(); TAG = this.getClass().getSimpleName(); myApplication = this; } } |
然后在AndroidManifest.xml中添加网络权限和注册自定义的Application。
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".activity.MyApplication"
...
|
接着创建一个Volley网络请求管理类,代码如下所示:
public class HttpVolleyUtil {
// 获取请求队列类 public static RequestQueue mRequestQueue = Volley.newRequestQueue(MyApplication.newInstance()); //添加任务进任务队列 public static void addRequest(Request<?> request, Object tag) { if (tag != null) { request.setTag(tag); } mRequestQueue.add(request); } //取消任务 public static void cancelRequest(Object tag){ mRequestQueue.cancelAll(tag); } } |
最后就可以在方法中使用Volley网络工具类了:
/**
* new StringRequest(int method,String url,Listener listener,ErrorListener errorListener) * method:请求方式,Get请求为Method.GET,Post请求为Method.POST * url:请求地址 * listener:请求成功后的回调 * errorListener:请求失败的回调 */
private void volleyGet() {
String url = "http://...";
StringRequest request = new StringRequest(Method.GET, url,
new Listener<String>() { @Override public void onResponse(String s) {//s为请求返回的字符串数据 Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show(); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Toast.makeText(MainActivity.this,volleyError.toString(),Toast.LENGTH_LONG).show(); }
});
//将请求加入全局队列中
HttpVolleyUtil.addRequest(request, "Tag");
}
|