NoHttp封装--02 自定义请求
bean实体类请求:
1.bean
import java.io.Serializable;
import com.alibaba.fastjson.annotation.JSONField; public class UserInfo implements Serializable {
private static final long serialVersionUID = 145641645L; @JSONField(name = "data")
private String data;
@JSONField(name = "error")
private int error;
@JSONField(name = "msg")
private String msg; public UserInfo() {
super();
} public UserInfo(String data, int error, String msg) {
super();
this.data = data;
this.error = error;
this.msg = msg;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public int getError() {
return error;
}
public void setError(int error) {
this.error = error;
} public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
} public boolean isSucceed() {
return == error;
} }
2.针对bean的request
import com.alibaba.fastjson.JSON;
import com.yolanda.nohttp.Headers;
import com.yolanda.nohttp.JsonObjectRequest;
import com.yolanda.nohttp.RequestMethod;
import com.yolanda.nohttp.RestRequest;
import com.yolanda.nohttp.StringRequest;
import com.yolanda.nohttptest.bean.UserInfo; public class UserInfoRequest extends RestRequest<UserInfo> { public UserInfoRequest(String url, RequestMethod requestMethod) {
super(url, requestMethod);
}
public UserInfoRequest(String url) {
super(url);
}
@Override
public String getAccept() {
return JsonObjectRequest.ACCEPT;
}
@Override
public UserInfo parseResponse(String url, Headers responseHeaders, byte[] responseBody) {
UserInfo info = null;
String string = StringRequest.parseResponseString(url, responseHeaders, responseBody);
try {
info = JSON.parseObject(string, UserInfo.class);
} catch (Exception e) {
info = new UserInfo();
}
return info;
}
}
3.具体在activity中使用:
public class ObjectActivity extends Activity implements View.OnClickListener {
private final int NOHTTP_LOGIN = 0x01;
private final int NOHTTP_LOGOUT = 0x02;
private TextView tvResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_object);
findViewById(R.id.btn_login).setOnClickListener(this);
findViewById(R.id.btn_logout).setOnClickListener(this);
tvResult = (TextView) findViewById(R.id.tv_result);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_login) {
UserInfoRequest request = new UserInfoRequest(Constants.LOGIN, RequestMethod.GET);
request.add("userName", "yolanda");
request.add("userPwd", "");
CallServer.getInstance().add(this, request, callBack, NOHTTP_LOGIN, true, false, true);
} else {
UserInfoRequest request = new UserInfoRequest(Constants.LOGOUT, RequestMethod.GET);
CallServer.getInstance().add(this, request, callBack, NOHTTP_LOGOUT, true, false, true);
}
}
private HttpCallBack<UserInfo> callBack = new HttpCallBack<UserInfo>() {
@Override
public void onSucceed(int what, Response<UserInfo> response) {
UserInfo info = response.get();
if (what == NOHTTP_LOGIN) {// 处理登录结果
if (info.isSucceed()) {
tvResult.setText("登录接口结果:" + info.getData());
}
} else if (what == NOHTTP_LOGOUT) {// 处理登出结果
if (info.isSucceed()) {
tvResult.setText("退出接口结果:" + info.getData());
}
}
}
@Override
public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {
tvResult.setText("请求失败");
}
};
}
可以解析所有JavaBean的自定义请求
public class JavaBeanRequest<E> extends RestRequest<E> {
private Class<E> clazz;
public JavaBeanRequest(String url, RequestMethod requestMethod, Class<E> clazz) {
super(url, requestMethod);
this.clazz = clazz;
}
public JavaBeanRequest(String url, Class<E> clazz) {
this(url, RequestMethod.GET, clazz);
}
@Override
public E parseResponse(String url, Headers responseHeaders, byte[] responseBody) {
String result = StringRequest.parseResponseString(url, responseHeaders, responseBody);
try {
return JSON.parseObject(result, clazz);
} catch (Exception e) {
E instance = null;
try {
// 但是前提是传进来的JavaBean必须提供了默认实现
instance = clazz.newInstance();
} catch (InstantiationException e1) {
} catch (IllegalAccessException e1) {
}
return instance;
}
}
@Override
public String getAccept() {
return JsonObjectRequest.ACCEPT;
}
}
activity
Request<ServerBean> request = new JavaBeanRequest<ServerBean>(url, ServerBean.class);
CallServer.getInstance().add(this, request, callBack, , true, false, true);
NoHttp封装--02 自定义请求的更多相关文章
- NoHttp封装--07 自定义异步任务框架
MainActivity: public class MainActivity extends Activity implements View.OnClickListener { .... @Ove ...
- Springboot学习06-Spring AOP封装接口自定义校验
Springboot学习06-Spring AOP封装接口自定义校验 关键字 BindingResult.Spring AOP.自定义注解.自定义异常处理.ConstraintValidator 前言 ...
- 封装的ajax请求
在做登录注册这类提交表单数据时,我们经常需要局部刷新网页来验证用户输入的信息,这就需要用到ajax请求,我们通常需要获取表单中的数据,发起ajax请求,通过服务程序,与数据库的数据进行比对,判断信息的 ...
- NoHttp封装--01
NoHttpActivity public class NoHttpActivity extends Activity implements View.OnClickListener { privat ...
- 02 flask 请求钩子、异常捕获、上下文、Flask-Script 扩展、jinja2 模板引擎、csrf防范
一 请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个 ...
- element-ui上传组件,通过自定义请求上传文件
记录使用element-ui上传组件,通过自定义请求上传文件需要注意的地方. <el-upload ref="uploadMutiple" :auto-upload=&quo ...
- uniapp封装uni.request请求
封装一个uniapp请求 新建一个http.js文件封装uni.request const BASE_URL = process.env.NODE_ENV === 'development' ? '' ...
- Android 网络请求库volley的封装,让请求更方便
首先封装一下volley 请求 public class CustomRequest extends StringRequest { private static final String TAG = ...
- 使用xib封装一个自定义view的步骤
使用xib封装一个自定义view的步骤 1> 新建一个继承UIView的自定义view,假设类名叫做(MJAppView) 2> 新建一个MJAppView.xib文件来描述MJAppVi ...
随机推荐
- Java基本数据类型总结、类型转换、常量的声明规范,final关键字的用法
1 Java 基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据. 因此,通过 ...
- .NET手记-HttpClient解析GB2312乱码问题
最近为App的服务器端卸了个爬虫程序,输出结果时发现出现乱码现象,尝试使用了几个方案发现效果并不太好,最后发现了一个很简单的用法. var result = await client.GetByteA ...
- Python Web Service
搞移动端有段时间了,一直使用别人的API,自己也只写过ASP.NET网站作为网络服务,相对来讲是很大的短板.虽然ASP.NET可以提供想要的web服务,但是其体量臃肿,响应速度非常慢,这点我非常不喜欢 ...
- python 离散序列 样本数伸缩(原创)
解决问题: 有一个固定长度的1维矩阵,将这个矩阵的取样点进行扩充和减少 功能函数: def discrete_scale(data, num): import numpy as np import c ...
- odoo开发笔记 -- 日常开发注意点总结(持续补充)
(1) odoo视图字段,如果是readonly,默认该数据是不会往后台传递的,因此,保存数据的时候,该字段的数据是不会存到数据库中的.(待确认,字段中增加默认值,保存) (2)视图界面,注释的时候, ...
- DDD实战进阶第一波(四):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架三)
上一篇文章我们讲了经典DDD架构对比传统三层架构的优势,以及经典DDD架构每一层的职责后,本篇文章将介绍基础结构层中支持DDD的轻量级框架的主要代码. 这里需要说明的是,DDD轻量级框架能够体现DDD ...
- 高手速成android开源项目【View篇】
主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialo ...
- Android快速实现二维码扫描--Zxing
Android中二维码扫描的最常用库是zxing和zbar,zxing项目地址为https://github.com/zxing/zxing,目前还有多个人在维护.zbar主要用C来写的,对速度有要求 ...
- vmware workstation 提示程序包可能有错,错误代码 29141 & 提示不可恢复错误: (vcpu-0)
问题一:提示程序包可能有错,错误代码 29141 换了n个版本(vmware workstation 10,11, 12),下载了n次,都提示该错误(29141),明明程序包没错啊, 一开始还怀疑是我 ...
- 分布式系统CAP理论以及注册中心选择
CAP定理:指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可同时获得. 一致性(C-数据 ...