实用volley 已经有一段时间了,觉得每次都去实例化一个方法感觉代码重复量大,于是对volley做了些封装提高代码的复用性
首先我们创建一个抽象类:
做网络监听:
/**
* Volley 请求监听
*/
* Volley 请求监听
*/
public abstract class VolleyInterface
{
// Volley监听类
public Response.Listener<String> mListener;
public Response.ErrorListener mErrorListener;
{
// Volley监听类
public Response.Listener<String> mListener;
public Response.ErrorListener mErrorListener;
public VolleyInterface()
{
loadingListener();
{
loadingListener();
errorListener();
}
}
/**
* 链接服务器成功
*/
public abstract void onMySuccess(String result);
* 链接服务器成功
*/
public abstract void onMySuccess(String result);
/**
* 链接服务器失败
*/
public abstract void onMyError(VolleyError error);
* 链接服务器失败
*/
public abstract void onMyError(VolleyError error);
// 实例化成功监听传人成功返回数据
public Response.Listener<String> loadingListener()
{
if (null == mListener)
{
this.mListener = new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
onMySuccess(response);
}
};
}
return mListener;
}
public Response.Listener<String> loadingListener()
{
if (null == mListener)
{
this.mListener = new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
onMySuccess(response);
}
};
}
return mListener;
}
// 实例化失败监听传人失败返回值
public Response.ErrorListener errorListener()
{
if (null == mErrorListener)
{
this.mErrorListener = new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
onMyError(error);
}
};
}
return this.mErrorListener;
}
public Response.ErrorListener errorListener()
{
if (null == mErrorListener)
{
this.mErrorListener = new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
onMyError(error);
}
};
}
return this.mErrorListener;
}
下面是实际调用方法
新建一个抽象类VolleyRequest 代码如下
public abstract class VolleyRequest
{
private static StringRequest stringRequest;
{
private static StringRequest stringRequest;
/**
* VOLLEY GET 请求
*
*
* @param url
* 请求地址
*
* @param tag
* 任务标识
*
* @param vif
* 请求监听
*
*/
public static void RequestGet(String url, VolleyInterface vif)
{
// 防止重复请求,所以先取消tag标识的请求队列
stringRequest = new StringRequest(Request.Method.GET, url, vif.loadingListener(), vif.errorListener());
ExampleApplication.getInstance().getRequestQueue().add(stringRequest);
* VOLLEY GET 请求
*
*
* @param url
* 请求地址
*
* @param tag
* 任务标识
*
* @param vif
* 请求监听
*
*/
public static void RequestGet(String url, VolleyInterface vif)
{
// 防止重复请求,所以先取消tag标识的请求队列
stringRequest = new StringRequest(Request.Method.GET, url, vif.loadingListener(), vif.errorListener());
ExampleApplication.getInstance().getRequestQueue().add(stringRequest);
}
/**
* VOLLEY POST 请求
*
*
* @param url
* 请求地址
* @param params
* 键值对
* @param vif
* 请求监听
*
*/
public static void RequestPost(String url, final Map<String, String> params, VolleyInterface vif)
{
// 防止重复请求,所以先取消tag标识的请求队列
stringRequest = new StringRequest(Request.Method.POST, url, vif.loadingListener(), vif.errorListener())
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
};
ExampleApplication.getInstance().getRequestQueue().add(stringRequest);
}
* VOLLEY POST 请求
*
*
* @param url
* 请求地址
* @param params
* 键值对
* @param vif
* 请求监听
*
*/
public static void RequestPost(String url, final Map<String, String> params, VolleyInterface vif)
{
// 防止重复请求,所以先取消tag标识的请求队列
stringRequest = new StringRequest(Request.Method.POST, url, vif.loadingListener(), vif.errorListener())
{
@Override
protected Map<String, String> getParams() throws AuthFailureError
{
return params;
}
};
ExampleApplication.getInstance().getRequestQueue().add(stringRequest);
}
}
最后是实际应用 这里以post请求为例
Map<String, String> map = new HashMap<>();
map.put("", "");
map.put("", "");
VolleyRequest.RequestPost(httpurl, map, new VolleyInterface() {
@Override
public void onMySuccess(String result) {
if (null != result) {
public void onMySuccess(String result) {
if (null != result) {
String json = null;
// 替换反斜杠
json = result.replace("\\", "");
// 取掉引号
json = json.substring(1, json.length() - 1);
Log.e("应用", json);
// // FIXME 获取推送功能列表
new FunctionAT(null).getFunctionList();
// 小圆点
setXiaoYuanDian();
// 极光推送
initPush();
// 获得好友
initFriend();
doSuccess(json);
// 替换反斜杠
json = result.replace("\\", "");
// 取掉引号
json = json.substring(1, json.length() - 1);
Log.e("应用", json);
// // FIXME 获取推送功能列表
new FunctionAT(null).getFunctionList();
// 小圆点
setXiaoYuanDian();
// 极光推送
initPush();
// 获得好友
initFriend();
doSuccess(json);
}
}
}
@Override
public void onMyError(VolleyError error) {
// TODO Auto-generated method stub
initThisApplyData();
}
});
public void onMyError(VolleyError error) {
// TODO Auto-generated method stub
initThisApplyData();
}
});
ExampleApplication 类逻辑
private RequestQueue requestQueue;
private static ExampleApplication sInstance; // 当前对象
@Override
public void onCreate() {
super.onCreate();
ExampleApplication.sInstance = this;
public void onCreate() {
super.onCreate();
ExampleApplication.sInstance = this;
}
tQueue requestQueue;
public static synchronized ExampleApplication getInstance() {
return sInstance;
}
return sInstance;
}
/**
* Volley
*
* @return 返回RequestQueue
*/
public RequestQueue getRequestQueue() {
if (requestQueue == null) {
requestQueue = Volley.newRequestQueue(getApplicationContext());
}
return requestQueue;
}
* Volley
*
* @return 返回RequestQueue
*/
public RequestQueue getRequestQueue() {
if (requestQueue == null) {
requestQueue = Volley.newRequestQueue(getApplicationContext());
}
return requestQueue;
}
好了大功告成