NoHttp封装--01
NoHttpActivity
public class NoHttpActivity 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_nohttp);
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) {
FastJsonRequest request = new FastJsonRequest(Constants.LOGIN, RequestMethod.GET);
request.add("userName", "yolanda");
request.add("userPwd", "");
CallServer.getInstance().add(this, request, callBack, NOHTTP_LOGIN, true, false, true);
} else {
FastJsonRequest request = new FastJsonRequest(Constants.LOGOUT, RequestMethod.GET);
CallServer.getInstance().add(this, request, callBack, NOHTTP_LOGOUT, true, false, true);
}
}
private HttpCallBack<JSONObject> callBack = new HttpCallBack<JSONObject>() {
@Override
public void onSucceed(int what, Response<JSONObject> response) {
if (what == NOHTTP_LOGIN) {// 处理登录结果
JSONObject jsonObject = response.get();
tvResult.setText("登录接口数据:" + jsonObject.getString("data"));
} else if (what == NOHTTP_LOGOUT) {// 处理登出结果
JSONObject jsonObject = response.get();
tvResult.setText("退出接口数据:" + jsonObject.getString("data"));
}
}
@Override
public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {
tvResult.setText("请求失败");
}
};
}
CallServer:
public class CallServer {
private static CallServer instance;
private RequestQueue queue;
public synchronized static CallServer getInstance() {
if (instance == null) {
instance = new CallServer();
}
return instance;
}
private CallServer() {
queue = NoHttp.newRequestQueue();
}
/**
* 添加一个请求到请求队列
*
* @param context 上下文
* @param request 请求对象
* @param callBack 接受回调结果
* @param what what,当多个请求用同一个responseListener接受结果时,用来区分请求
* @param isShowDialog 是否显示dialog
* @param isCanCancel 请求是否能被用户取消
* @param isShowError 是否提示用户错误信息
*/
public <T> void add(Context context, Request<T> request, HttpCallBack<T> callBack, int what, boolean isShowDialog, boolean isCanCancel, boolean isShowError) {
queue.add(what, request, new ResponseListener<T>(request, context, callBack, isShowDialog, isCanCancel, isShowError));
}
}
ResponseListener:
public class ResponseListener<T> implements OnResponseListener<T> {
private Request<T> mRequest;
private WaitDialog mDialog;
private HttpCallBack<T> callBack;
private boolean isShowError;
public ResponseListener(Request<T> request, Context context, HttpCallBack<T> callBack, boolean isShowDialog, boolean isCanCancel, boolean isShowError) {
this.mRequest = request;
this.callBack = callBack;
this.isShowError = isShowError;
if (context != null && isShowDialog) {
mDialog = new WaitDialog(context);
mDialog.setCancelable(isCanCancel);
mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
mRequest.cancel(true);
}
});
}
}
@Override
public void onStart(int what) {
if (mDialog != null && !mDialog.isShowing())
mDialog.show();
}
@Override
public void onSucceed(int what, Response<T> response) {
if (callBack != null)
callBack.onSucceed(what, response);
}
@Override
public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) {
if (isShowError) {
if (exception instanceof ClientError) {// 客户端错误
Toast.show("客户端发生错误");
} else if (exception instanceof ServerError) {// 服务器错误
Toast.show("服务器发生错误");
} else if (exception instanceof NetworkError) {// 网络不好
Toast.show("请检查网络");
} else if (exception instanceof TimeoutError) {// 请求超时
Toast.show("请求超时,网络不好或者服务器不稳定");
} else if (exception instanceof UnKnownHostError) {// 找不到服务器
Toast.show("未发现指定服务器");
} else if (exception instanceof URLError) {// URL是错的
Toast.show("URL错误");
} else if (exception instanceof NotFoundCacheError) {
Toast.show("没有发现缓存");
} else {
Toast.show("未知错误");
}
}
if (callBack != null)
callBack.onFailed(what, url, tag, exception, responseCode, networkMillis);
}
@Override
public void onFinish(int what) {
if (mDialog != null && mDialog.isShowing())
mDialog.dismiss();
}
}
HttpCallBack
public interface HttpCallBack<T> {
/**
* Server correct response to callback when an HTTP request.
*
* @param what the credit of the incoming request is used to distinguish between multiple requests.
* @param response in response to the results.
*/
void onSucceed(int what, Response<T> response);
/**
* When there was an error correction.
*
* @param what the credit of the incoming request is used to distinguish between multiple requests.
* @param url url.
* @param tag tag of request callback.
* @param exception error message for request.
* @param responseCode server response code.
* @param networkMillis request process consumption time.
*/
void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis);
}
FastJsonRequest:自定义FastJsonRequest对象,所有的自定义对象都要继承{@link RestReqeust}
public class FastJsonRequest extends RestRequest<JSONObject> {
public FastJsonRequest(String url, RequestMethod requestMethod) {
super(url, requestMethod);
}
public FastJsonRequest(String url) {
super(url);
}
/**
* 高速服务端你能接受的数据类型是什么
*/
@Override
public String getAccept() {
return JsonObjectRequest.ACCEPT;
}
/**
* @param url 请求的url
* @param responseHeaders 服务端的响应头
* @param 服务端的响应数据
* @return 你解析后的对象
*/
@Override
public JSONObject parseResponse(String url, Headers responseHeaders, byte[] responseBody) {
return parse(url, responseHeaders, responseBody);
}
/**
* 解析服务端数据成{@link JsonObject}
*
* @param url
* @param responseHeaders
* @param responseBody
* @return
*/
public static JSONObject parse(String url, Headers responseHeaders, byte[] responseBody) {
String string = StringRequest.parseResponseString(url, responseHeaders, responseBody);
JSONObject jsonObject = null;
try {
jsonObject = JSON.parseObject(string);
} catch (Exception e) {// 可能返回的数据不是json,或者其他异常
string = "{}";
jsonObject = JSON.parseObject(string);
}
return jsonObject;
}
}
WaitDialog:
public class WaitDialog extends ProgressDialog {
public WaitDialog(Context context) {
super(context);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setCanceledOnTouchOutside(false);
setProgressStyle(STYLE_SPINNER);
setMessage("正在请求,请稍候…");
}
}
Constants
public class Constants {
private static final String SERVER = "http://192.168.1.116/HttpServer/";
/**
* 登录接口
*/
public static final String LOGIN = SERVER + "login";
/**
* 退出登录接口
*/
public static final String LOGOUT = SERVER + "logout";
}
NoHttp封装--01的更多相关文章
- # 095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结
095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)
094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)
093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)
092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 01 static关键字(上)
091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包
090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包
089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现
088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...
- 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点
087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...
随机推荐
- USB插入电脑的硬件检测和枚举流程
USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两 ...
- SqlServer 更改数据库名称
1.首先选中需要更改数据库右击属性找到文件, 此处可直接修改数据库逻辑名称 2.选中数据库右击选择重命名修改数据库名称. 3.将数据库进行分离,找到数据库文件mdf与ldf文件,直接更改文件名称 4. ...
- app自动化测试之实战应用(百度app简单测试)
模拟在百度app中搜索python相关内容代码如下: from appium import webdriver desired_caps = {} desired_caps['deviceName'] ...
- 使用切片拦截Rest服务
使用切片拦截Rest服务 1.使用过滤器Filter: 我们可以在建立的springboot的项目中建立新的类来是先Filter的接口,doFilter是过滤器中的主要方法,用来做处理逻辑,最后我们只 ...
- jenkins内部分享ppt
持续集成Continuous integration简介(持续集成是什么) .持续集成源于极限编程(XP),是一种软件实践,软件开发过程中集成步骤是一个漫长并且无法预测的过程.集成过程中可能会爆 ...
- 全网最详细的IDEA里如何正确新建普通的Java web项目并发布到Tomcat上运行成功【博主强烈推荐】(类似eclipse里同一个workspace下【一个子项目】并存)(图文详解)
不多说,直接上干货! 首先,大家要明确,IDEA.Eclipse和MyEclipse等编辑器之间的新建和运行手法是不一样的. 如果是在Myeclipse里,则是File -> new -> ...
- 从零开始学 Web 之 Ajax(四)接口文档,验证用户名唯一性案例
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- python subprocess模块详解
一.subprocess标准库 python执行shell脚本,通常会使用so模块中的几个方法,如system.spawn*.popen等.subprocess标准库的引入就是为了取代这些老的模块方法 ...
- 分析MySQL中哪些情况下数据库索引会失效
要想分析MySQL查询语句中的相关信息,如是全表查询还是部分查询,就要用到explain. 一.explain 用法:explain +查询语句. id:查询语句的序列号,上面图片中只有一个selec ...
- Java和Python分别实现直接选择排序
1.基本思想 将指定排序位置与其他数组元素分别对比,如果满足条件就进行交换.个人理解其实就是每趟循环从数组里选一个最大的值(最小的值)放到数组最后(最前). 2.算法实现 这里以每趟循环从数组中选择一 ...