Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式。
JsonObjectRequest:返回JSON对象。
JsonArrayRequest:返回JsonArray。
StringRequest:返回String,这样可以自己处理数据,更加灵活。
这里我就把StringRequest简单进行二次封装,方便在代码中调用;
省去代码中 new对象,加入队列,设置tag的步骤
全局的application中创建一个请求队列
queue = Volley.newRequestQueue(getApplicationContext());
,暴露出来,这样不用每次都创建网络请求队列,节省资源
/**
* 返回全局的请求队列
* @return
*/
public static RequestQueue getHttpQueues() {
return queue;
}
封装一个get请求和post请求的工具类:
public class VolleyRequest {
public static StringRequest stringRequest;
public static Context mContext;
public static void RequestGet(Context mContext, String url, String tag,
VolleyInterface vif) {
stringRequest = new StringRequest(Method.GET, url,
vif.loadingListener(), vif.errorListener());
// 设置标签
stringRequest.setTag(tag);
// 加入队列
BaseApplication.getHttpQueues().add(stringRequest);
}
public static void RequestPost(Context mContext, String url, String tag,
final Map params, VolleyInterface vif) {
stringRequest = new StringRequest(Method.POST, url,
vif.loadingListener(), vif.errorListener()) {
@Override
protected Map getParams() throws AuthFailureError {
return params;
}
};
// 设置标签
stringRequest.setTag(tag);
// 加入队列
BaseApplication.getHttpQueues().add(stringRequest);
}
}
重写属于自己 成功和失败的回调监听接口:
public abstract class VolleyInterface {
public Context mContext;
public static Listener mListener;
public static ErrorListener mErrorListtener;
public VolleyInterface(Context context) {
this.mContext = context;
}
public abstract void onMySuccess(String result);
public abstract void onMyError(VolleyError error);
public Listener loadingListener() {
mListener = new Listener() {
@Override
public void onResponse(String result) {
onMySuccess(result);
}
};
return mListener;
}
public ErrorListener errorListener() {
mErrorListtener = new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
onMyError(error);
}
};
return mErrorListtener;
}
}
代码中的使用方法
先贴一下get的使用
String url= "www.baidu.com";
VolleyRequest.RequestGet(getApplicationContext(), url, "join", new VolleyInterface(getApplicationContext()) {
@Override
public void onMySuccess(String result) {
ToastUtils.showToast(getApplicationContext(), "提交成功 ");
}
@Override
public void onMyError(VolleyError error) {
ToastUtils.showToast(getApplicationContext(), "提交失败,检查您的网络 ");
}
});
设置tag是为了关联你的生命周期,在生命周期销毁的时候,通过tag取消网络请求.
接下来是post请求
Map<String, String> params = new HashMap<String , String>();
VolleyRequest.RequestPost(getApplicationContext(), url, "tag", params, new VolleyInterface(getApplicationContext()) {
@Override
public void onMySuccess(String result) {
// 成功的回调
}
@Override
public void onMyError(VolleyError error) {
//失败的
}
});
post请求需要一个map集合来添加传的参数,
参数集合
public class RequestUtils {
public static Map<String,String> getParams(){
Map<String , String> params = new HashMap<String, String>();
// params.put("os", "android");
// params.put("token", Global.token);
return params;
}
}
简单封装使用,具体封装实现,还要根据业务来实现