Android 网络请求库volley的封装,让请求更方便
首先封装一下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的封装,让请求更方便的更多相关文章
- android网络请求库volley方法详解
		使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列 ... 
- android网络开源框架volley(五岁以下儿童)——volley一些细节
		最近的一次volley整理出下一个.我以前没有再次遭遇了一些小问题,在该记录: 1.HttpUrlConnection DELETE 信息不能加入body问题:java.net.ProtocolExc ... 
- 爬虫(二)—— 请求库(二)selenium请求库
		目录 selenium请求库 一.什么是selenium 二.环境搭建 三.使用selenium模块 1.使用chrome并设置为无GUI模式 2.使用chrome有GUI模式 3.显示等待与隐式等待 ... 
- 爬虫(一)—— 请求库(一)requests请求库
		目录 requests请求库 爬虫:爬取.解析.存储 一.请求 二.响应 三.简单爬虫 四.requests高级用法 五.session方法(建议使用) 六.selenium模块 requests请求 ... 
- 小记:对Android网络下载工具的初步封装!(包括json,字符串下载(volley),和图片下载(glide))
		import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkIn ... 
- Android网络访问库 - Retrofit学习(1)基础
		Retrofit是什么 Retrofit是一个类型安全的HTTP客户端,支持Android和Java.它是Square公司开源的项目,当前版本2.0. 在实际开发中,我们Retrofit配合OKHTT ... 
- android网络编程之HttpUrlConnection的讲解--POST请求
		1.服务器后台使用Servlet开发,这里不再介绍. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ... 
- android网络编程之HttpUrlConnection的讲解--GET请求
		1.服务器后台使用Servlet开发,这里不再介绍. 2.测试机通过局域网链接到服务器上,可以参考我的博客:http://www.cnblogs.com/begin1949/p/4905192.htm ... 
- 爬虫(十一)—— 请求库(三)pypeteer请求库
		曾经使用模拟浏览器操作(selenium + webdriver)来写爬虫,但是稍微有点反爬的网站都会对selenium和webdriver进行识别,网站只需要在前端js添加一下判断脚本,很容易就可以 ... 
随机推荐
- webform连接ACCESS数据库
			1.先建立一个名叫mydb.accdb的access数据库 2.他它复制到webform中,放在App_Data文件夹下. 3.在App_Code文件夹下建好封装语句,查询方法,连接语句,其中stud ... 
- js 原生 ajax  异步上传图片
			<script type="text/javascript"> function upload() { var file1 = document.getElementB ... 
- DG配置实验
			1.配置主库环境 2.为备库创建备份文件 3.启动主备库验证配置 4.DG测试 5.DG主备库切换 6.DG主备库第二次切换 
- 记录下ECharts的一些功能
			用到ECharts记录下一些功能免得以后找文档找不到. 这个博客对ECharts讲解很全面 http://www.stepday.com/my.stepday/?echarts // 使用 requi ... 
- Linux下JDK安装笔记
			环境说明: Linux版本: CentOS6.2 JDK:jdk-7u60-linux-x64.tar.gz 1.下载jdk-7u60-linux-x64.tar.gz,本人是放到了~/工具 目录 ... 
- 继续畅通工程-Floyd
			畅通工程续 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submiss ... 
- html background 背景颜色美化 类似毛玻璃
			制作高大上背景颜色 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ... 
- session生命周期
			session生命周期 原文链接:http://blog.sina.com.cn/s/blog_72c8c1150100qpgl.html 文中黄色字体为我的标记修改或添加 Session保存在服务器 ... 
- Flex HTTPService json
			import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; i ... 
- java跳出外部循环
			java跳出外部循环两种方法 //用flag标识 boolean flag = true; for(int i=0;i<10&&flag;i++){ for(int j=0;j& ... 
