首先封装一下volley 请求

public class CustomRequest extends StringRequest {

    private static final String TAG = CustomRequest.class.getSimpleName();
private String mBody;
private Map<String, String> mHeaders = new HashMap<>(); public CustomRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
super(method, url, listener, errorListener);
     //设置消息头
mHeaders.put("按需求写自己的内容", "按需求写自己的内容");
     mHeaders.put("accetp","application/json");
     //可以有很多个 }

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Log.i(TAG, mHeaders.toString());
return mHeaders;
} @Override
public byte[] getBody() throws AuthFailureError {
try {
return TextUtils.isEmpty(mBody) ? super.getBody() : mBody.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
// Log.e(TAG, "getBody", e);
}
return super.getBody();
} public void setBody(String body) {
mBody = body;
} public Map<String, String> getResonseHeaders() {
return super.getResonseHeaders();
} } 其次我们还要封装一个请求类
public class CustomRequester<Resp extends Response> {
private static final String TAG = "CustomRequester";
private final Context mContext;
private final Class<Resp> mClazz;
private final com.android.volley.Response.ErrorListener mErrorListener = new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
int statusCode = volleyError == null ? 0 : volleyError.networkResponse == null ? 0 : volleyError.networkResponse.statusCode;
Log.e(TAG, "statusCode: " + statusCode, volleyError);
if (mTag == null) {
return;
}
onError();
if (statusCode == 0) {
onNetError();
} else if (statusCode == 401) {//不同的请求码做不同的处理
} else if (statusCode == 404) {
} else if (statusCode == 400) {
} else if (statusCode == 403) { } else {
String json = volleyError.networkResponse.data == null ? "" : new String(volleyError.networkResponse.data);
if (!TextUtils.isEmpty(json)) {
if (mContext instanceof Activity) {
Log.i(TAG, "json " + json);
try {
json = JSON.parseObject(json, Response.class).getMessage();
// onError(json);
} catch (Exception e) {
onError(json + "not json format!");
}
}
}
}
}
}; private final com.android.volley.Response.Listener<String> mResponseListener = new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String json) {
Log.i(TAG, "json " + json);
CustomRequester.this.onResponse(json);
if (mTag == null) {
return;
}
try {
final Resp resp = JSON.parseObject(json, mClazz);
if (resp != null) {
onSuccess(resp); //请求成功 这里直接返回解析好的 model
}
} catch (Exception e) {
Log.e(TAG, "onResponse", e);
}
}
};
private String mTag; public void onResponse(String json) {
} public void onSuccess(Resp resp) {
} public void onError() {
} public void onNoFoundError() {
if (mContext instanceof Activity) {
}
} public CustomRequester(Class<Resp> clazz) {
mContext = null;
mClazz = clazz;
} public CustomRequester(Context context, Class<Resp> clazz) {
mContext = context;
mClazz = clazz;
} public void cancelAll() {
final String tag = mTag;
mTag = null;
if (!TextUtils.isEmpty(tag)) {
MyApplication.getInstance().getRequestQueue().cancelAll(tag);
}
}     //Post 请求
public CustomRequest post(String url, int page, String body) {
final RequestQueue queue = MyApplication.getInstance().getRequestQueue();
final CustomRequest request = new CustomRequest(Request.Method.POST, url, mResponseListener, mErrorListener);
try {
final Map<String, String> header = request.getHeaders();
header.remove("Range");
if (page > 0) {
header.put("Range", String.format("page:%1$d,max:10", page));
}
} catch (AuthFailureError authFailureError) {
authFailureError.printStackTrace();
}
mTag = "post," + url + "," + body;
request.setTag(mTag); Log.i(TAG, mTag);
request.setBody(body);
queue.add(request);
return request;
}
    //Get 请求
public CustomRequest get(String url, int page, String body) {
final RequestQueue queue = YZApplication.getInstance().getRequestQueue();
final CustomRequest request = new CustomRequest(Request.Method.GET, url, mResponseListener, mErrorListener);
try {
final Map<String, String> header = request.getHeaders();
header.remove("Range");
if (page > 0) {
header.put("Range", String.format("page:%1$d,max:10", page));
}
} catch (AuthFailureError authFailureError) {
authFailureError.printStackTrace();
}
mTag = "post," + url + "," + body;
request.setTag(mTag); Log.i(TAG, mTag);
request.setBody(body);
queue.add(request);
return request;
}
 
    //Put 请求
public CustomRequest put(String url, int page, String body) {
final RequestQueue queue = MyApplication.getInstance().getRequestQueue();
final CustomRequest request = new CustomRequest(Request.Method.PUT, url, mResponseListener, mErrorListener); try {
final Map<String, String> header = request.getHeaders();
header.remove("Range");
if (page > 0) {
header.put("Range", String.format("page:%1$d,max:10", page));
}
} catch (AuthFailureError authFailureError) {
authFailureError.printStackTrace();
}
mTag = "put," + url + "," + body;
request.setTag(mTag);
request.setBody(body);
queue.add(request);
return request;
}
    //Delete 请求
public CustomRequest delete(String url, int page, String body) {
final RequestQueue queue = MyApplication.getInstance().getRequestQueue();
final CustomRequest request = new CustomRequest(Request.Method.DELETE, url, mResponseListener, mErrorListener);
try {
final Map<String, String> header = request.getHeaders();
header.remove("Range");
if (page > 0) {
header.put("Range", String.format("page:%1$d,max:10", page));
}
} catch (AuthFailureError authFailureError) {
authFailureError.printStackTrace();
}
mTag = "delete," + url + "," + body;
request.setTag(mTag);
request.setBody(body);
queue.add(request);
return request;
} }
调用
Response是你的model
1.
private AppRequester<Response> mRequester;
2.
mRequester = new AppRequester<Response>(this, Response.class) {
    @Override
public void onSuccess(Response response) {
super.onSuccess(response);
      //成功的操作,展示页面等
}
  
  @Override
  public void onError() {
   super.onError();
  }
};

3.
//get方式
mRequester.get("URL");
//post 方式  
mRequester.post(URL, JSON.toJSONString(model));
这样就好了,使用时特别方便,你们试试。
 
 

Android 网络请求库volley的封装,让请求更方便的更多相关文章

  1. android网络请求库volley方法详解

    使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列     ...

  2. android网络开源框架volley(五岁以下儿童)——volley一些细节

    最近的一次volley整理出下一个.我以前没有再次遭遇了一些小问题,在该记录: 1.HttpUrlConnection DELETE 信息不能加入body问题:java.net.ProtocolExc ...

  3. 爬虫(二)—— 请求库(二)selenium请求库

    目录 selenium请求库 一.什么是selenium 二.环境搭建 三.使用selenium模块 1.使用chrome并设置为无GUI模式 2.使用chrome有GUI模式 3.显示等待与隐式等待 ...

  4. 爬虫(一)—— 请求库(一)requests请求库

    目录 requests请求库 爬虫:爬取.解析.存储 一.请求 二.响应 三.简单爬虫 四.requests高级用法 五.session方法(建议使用) 六.selenium模块 requests请求 ...

  5. 小记:对Android网络下载工具的初步封装!(包括json,字符串下载(volley),和图片下载(glide))

    import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkIn ...

  6. Android网络访问库 - Retrofit学习(1)基础

    Retrofit是什么 Retrofit是一个类型安全的HTTP客户端,支持Android和Java.它是Square公司开源的项目,当前版本2.0. 在实际开发中,我们Retrofit配合OKHTT ...

  7. android网络编程之HttpUrlConnection的讲解--POST请求

    1.服务器后台使用Servlet开发,这里不再介绍. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ...

  8. android网络编程之HttpUrlConnection的讲解--GET请求

    1.服务器后台使用Servlet开发,这里不再介绍. 2.测试机通过局域网链接到服务器上,可以参考我的博客:http://www.cnblogs.com/begin1949/p/4905192.htm ...

  9. 爬虫(十一)—— 请求库(三)pypeteer请求库

    曾经使用模拟浏览器操作(selenium + webdriver)来写爬虫,但是稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很容易就可以 ...

随机推荐

  1. Hadoop.2.x_源码编译

    一.基本环境搭建 1. 准备 hadoop-2.5.0-src.tar.gz apache-maven-3.0.5-bin.tar.gz jdk-7u67-linux-x64.tar.gz proto ...

  2. CentOS默认开放的本地端口范围

    系统本地开放端口的范围:(默认30000多到60000多) [root@linux2 ~]# vim /etc/sysctl.conf net.ipv4.ip_local_port_range = 1 ...

  3. Jquery省市区三级联动案例

    //Java部分代码 public String province() throws Exception { List<Province> list=cityBiz.showProvinc ...

  4. c# 复习

    一.输入输出语句 二.异常语句 try catch  fina 保护程序,在出错的情况下也不会终止. 三.输入一个日期,判断是否正确. 每日一语:觉得自己做得到和做不到,其实只在一念之间.

  5. loading.gif

  6. IOS网络第一天-01基本的HTTP请求

    *************************** #import "HMViewController.h" #import "MBProgressHUD+MJ.h& ...

  7. Network | UDP checksum

    1. 校验和 ICMP,IP,UDP,TCP报头部分都有checksum(检验和)字段.IP 首部里的校验和只校验首部:ICMP.IGMP.TCP和UDP首部中的校验和校验首部和数据. UDP和TCP ...

  8. python 安装mysql-python模块

    方式一 使用yum安装 # yum install MySQL-python 方式二 使用pip 安装 # pip install mysql-python 使用pip方式安装需要提前安装如下依赖 m ...

  9. NEC学习 ---- 模块 -简易文字链接列表

    为了方便查看, 在最外面设置了一个粉色框. html代码: <div class="container"> <ul class="m-list" ...

  10. Masonry学习分享

    不完整目录 •UIScrollView 应用Masonry的正确用法 •tableHeaderView使用Masonry •同向文字显示优先级 1.基础篇 1.1基础使用 1.1.1运行效果 1.1. ...