Volley框架:2013年Google I/O大会上,Volley发布了。Volley是Google官方布的用于Android
平台上的网络通信库,目的是使网络通信更快,更简单,更健壮。
gitthub开源地址:https://github.com/stormzhang/AndroidVolley
* 特点:
* 网络通信更快,更简单,更健壮
* Get,POST等常用网络请求及图像高效异步处理
* 可以对多个网络请求进行优先级排序,可以多级别取消请求操作
* 网络请求的缓存处理
* 可以和Activity生命周期互动
* 缺点:不适合大数据和流媒体数据传输的网络请求,如视屏下载,大文件下载等。
* 使用步骤:
* 1,建立请求队列
* 2,将请求添加到队列中
* 3,用GET或POST(传递参数)发送请求
* 4,在请求结果的回调中进行相应的逻辑处理
* ———————————–
* Volley请求提供了三种类型请求:
* StringRequest 返回数据类型:String,本文的例子就是以这个为例
* JsonObjectRequest 返回数据类型:JsonObject
* JsonArrayRequest 返回数据类型:JsonArray
/**
* 定义全局的Application,在这里对Volley及android-async-http框架进行配置
* @description:
* @date 2016-1-11 上午9:59:17
*/
public class GlobalApplication extends Application {
/*Volley网络请求队列**/
public static RequestQueue mQueue;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
mQueue=Volley.newRequestQueue(this);//初始化请求队列
}
/*对外获取队列对象的方法**/
public static RequestQueue getVolleyQueue(){
return mQueue;
}
}
Activity中使用Volley的get与post进行网络请求:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//使用Volley的get请求
getByVolley();
//使用Volley的POST请求
postByVolley();
}
private void postByVolley() {
String url="http://apis.juhe.cn/mobile/get?";//用Post要把get请求后面的字段用参数的方式过去
StringRequest request=new StringRequest(Method.POST,url, new Listener<String>() {
@Override
public void onResponse(String response) {//请求成功返回的数据
Log.v("ldm", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {//请求失败的处理
Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_SHORT).show();
}
}){
@SuppressWarnings("unchecked")
@Override
protected Map<String, String> getParams() throws AuthFailureError {//传递参数的方法
Map<String, String> param=new HashMap<>();
param.put("phone", "13429667914");
param.put("key", "xxxxxxxx");
return param;
}
};
request.setTag("post");
GlobalApplication.getVolleyQueue().add(request);//把请求添加到队列中
}
private void getByVolley() {
//网络请求的连接地址,xxxxxxxx指你在聚合api网站申请的对应的key值
String url="http://apis.juhe.cn/mobile/get?phone=13429667914&key=xxxxxxxx";
StringRequest request=new StringRequest(Method.GET,url, new Listener<String>() {
@Override
public void onResponse(String response) {//请求成功返回的数据
Log.v("ldm", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {//请求失败的处理
Toast.makeText(MainActivity.this, "请求失败", Toast.LENGTH_SHORT).show();
}
});
request.setTag("get");
GlobalApplication.getVolleyQueue().add(request);//把请求添加到队列中
}
//在Activity的生命周期Onstop中取消tag为“get”对应请求
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
GlobalApplication.getVolleyQueue().cancelAll("get");
}
}
最后不要忘记在AndroidManifest.xml中配置网络权限 :