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添加一下判断脚本,很容易就可以 ...
随机推荐
- Log4cplus使用
Log4cplus使用¶ 1.1 简介 log4cplus是C++编写的开源日志系统,前身是java编写的log4j日志系统.log4cplus具有线程安全.灵活.以及多粒度控制的特点,通过将信息划分 ...
- [CareerCup] 18.5 Shortest Distance between Two Words 两单词间的最短距离
18.5 You have a large text file containing words. Given any two words, find the shortest distance (i ...
- input相关问题总结
1. 禁止为所有被激活的输入框添加边框 *:focus {outline: none} 2. 禁止为被激活的输入框添加边框,说明:".abc"为输入框对象自定义添加的class类命 ...
- PL/SQL 导出dmp文件时发现表少了
(1)查看日志,是否有如下提示信息: EXP-: no storage definition found , ) 解决方法: http://www.it165.net/database/html/20 ...
- bootstrap学习笔记之三(组件的使用)
bootstrap组件需要引入bootstrap.js才行,当然要引入bootstrap.js首先得引入JQuery. 一.下拉菜单 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另 ...
- 演示对sys用户和普通用户进行审计的示例
1.确认数据库版本 1对SYS用户审计 1.1配置审计参数 1.2修改liunx日志配置文件 添加以下一列: 1.3 SYS 用户操作演示 2对普通用户审计 2.1配置审计参数 2.2演示对TEST用 ...
- 需要注意学习.net过程的要点
基础部分 C# 基础语法 OOP的概念,面向对象的理解 继承 封装 多态 ASP.NET MVC (Web Form 用的越来越少,如果你不熟悉,可以不看) JavaScript 基础语法 如何在HT ...
- Android课程---视图组件之开关按钮
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...
- 数据库---T-SQL语句提纲
T-SQL语句: 创建表:create table Name(Code varchar(50)) 主键:primary key自增长列:auto_increment外键关系:references非空: ...
- Windows内核 基本数据结构
驱动对象: 每个驱动程序都会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载时被内核中的对象管理程序所创建的.驱动对象用DRIVER_OBJECT数据结构表示,它作为驱动的一个实例被内核加载,并 ...