1. Volley简介
我们平时在开发Android应用的时候都需要用到网络技术,而多数情况下都会使用Android系统中自带的网络加载HttpURLConnection 和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高,特别是HttpURLConnection。
不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是乎,一些Android网络通信框架也就应运而生,比如说AsyncHttpClient,Volley等等。
Volley是Google公司在2013年 I/O大会上推出了一个新的网络通信框架。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。
2.Volley的用法
首先需要去 github
StringRequest的用法
首先需要获取到一个RequestQueue对象,可以调用如下方法获取到
代码如下
package com.example.openproject.app;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
import .Application;
import android.content.Context;
public class MyApplication extends Application{
public static <span style="background-color: rgb(255, 0, 0);">RequestQueue</span> queue;//请求队列对象
public static RequestQueue getRequestQueue(Context context){
if(queue==null){
queue=Volley.newRequestQueue(context);
}
return queue;
}
}
注意这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。
由于我们要多次联网请求数据,为了省事,所以我把 StringRequest给封装成了一个工具类
package com.example.openproject.utils;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.example.openproject.app.MyApplication;
import com.example.openproject.bean.Volley_Huidiao;
public class MyVolley {
//get请求
public static void getVolley(String path,final Volley_Huidiao huidiao,Context context){
StringRequest request = new StringRequest(Request.Method.GET,path, new Response.Listener<String>() {
@Override//联网成功
public void onResponse(String response) {
huidiao.getData(response);
}
},new Response.ErrorListener() {
//联网失败
@Override
public void onErrorResponse(VolleyError error) {
}
});
request.setTag("get");
MyApplication.getRequestQueue(context).add(request);
}
//post请求
public static void postVolley(String path,final Volley_Huidiao huidiao,Context context,final HashMap<String, String> myMap){
StringRequest stringRequest = new StringRequest(Request.Method.POST, path, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//联网成功
huidiao.getData(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//联网失败
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
// TODO Auto-generated method stub
return myMap;
}
};
stringRequest.setTag("post");
MyApplication.getRequestQueue(context).add(stringRequest);
}
}
</pre><p></p><pre>
给设置一个接口类 Volley_Huidiao
package com.example.openproject.bean;
public interface Volley_Huidiao {
void getData(String data);
}
在MainActivity中调用
MyVolley.getVolley(str, new Volley_Huidiao() { // str代表网址 Volley_Huidiao 是你写的接口
@Override
public void getData(String data) {
//data 就是你需要解析的json字符串
}
}, 上下文);
另外,由于Volley是要访问网络的,因此不要忘记在你的AndroidManifest.xml中添加如下权限:
<uses-permission android:name="android.permission.INTERNET" />
以上就是StringRequest的用法