学习NoHttp的原因是由于公司之前做的产品使用的网络请求框架一直都是Volley(为什么使用Volley就不用多说了,最起码是谷歌开发团队自己搞的,总感觉权威一些),可是自从android6.0推出以后,Volley的使用开始有点动摇了。因为android6.0删除了HttpClient相关的API,我们知道的一般网络请求使用的API是HttpClient和URLConnection,而Volley就是基于HttpClient,虽然android2.3后2.3Volley可以解析URLConnection,但是部分解析URLConnection请求和响应还是用HttpClient的API。Google在android6.0删除HttpClient的缘由我们不去赘述,但是为此带来的问题就是可能在之后的版本中,volley的使用会存在一些问题,所以这个时候,公司觉得逐步用NoHttp(他是支持URLConnection的)取代Volley。

  那么问题来了,volley和nohttp的异同有那些呢??下面我是从http://blog.csdn.net/yanzhenjie1003截的图,对比比较全面:

  对比的东西就是上面那些,这里就不在一一分析了,接下来说的就是,如何使用nohttp:

  1、导包,这里就不在多说了,在androidstudio里面可以直接导入的。

  2、网络接口

    public static String URL = "http://192.168.1.210:8080/Today/";
public static String SELECTMYCONTENT_URL=URL+"mycontent_select.php";
/**
* 查找我的内容
* @param mContext
* @param begin
* @param length
* @param key
* @param onResponseListener
*/
public static void getSelectMyContentResult(Context mContext,String begin,String length,int key,
OnResponseListener onResponseListener){
Request<JSONObject> request=NoHttp.createJsonObjectRequest(SELECTMYCONTENT_URL,RequestMethod.POST);
request.add("user_id",UserInfo.getUserId(mContext));
request.add("begin",begin);
request.add("length",length);
request.addHeader("Author", "nohttp_sample");
ServerApi.requestQueue.add(key, request, onResponseListener);
}

  上面是我写的一个有关数据库查询的接口,里面的URL自定义,从服务器返回的数据是json格式的,向队列里添加的Request的参数是JSONObject。

  下面就接口的调用,其实很简单,由于这个网络接口写在ServerApi中,且接口是静态方法,所以调用的时候直接使用“类名.方法”就可以直接调用了。

ServerApi.getSelectMyContentResult(MyContentActivity.this, String.valueOf(begin),
String.valueOf(length), NOHTTP_WHAT_TEST,
onResponseListener);

  调用的时候传入相应的参数即可。

  接下就是写个OnResponseListener,其实这是一个数据回调对象,用于接收网络请求返回结果:

private OnResponseListener<JSONObject> onResponseListenerAppData = new OnResponseListener<JSONObject>() {
@SuppressWarnings("unused")
@Override
public void onSucceed(int what, Response<JSONObject> response) {
if (what == NOHTTP_WHAT_TEST) {// 判断what是否是刚才指定的请求
// 请求成功
String result = response.get().toString();// 响应结果
Log.d("TAGTAG",result);
// 响应头
Headers headers = response.getHeaders();
headers.getResponseCode();// 响应码
response.getNetworkMillis();// 请求花费的时间
}
} @Override
public void onFailed(int i, String s, Object o, Exception e, int i1, long l) {
Toast.makeText(MyContentActivity.this, "登录失败请重试", Toast.LENGTH_SHORT).show();
} @Override
public void onStart(int what) {
// 请求开始,显示dialog
} @Override
public void onFinish(int what) {
// 请求结束,关闭dialog
}
};

  如上,在对调对象中,明确的声明了网络请求开始、结束、成功、失败相对应的方法,相应的操作写在方法中即可。

  同时在上面的代码中有个常量:NOHTTP_WHAT_TEST。这个是自己定义的,用来标志请求的what, 类似handler的what一样,这里用来区分请求,这个自己定义。

  上面就是个很简单的使用nohttp实现网络请求的例子,至于其他的应用,会在后续的博客中更新。


不是闷骚的程序员算不上程序员。我的微信公众号“那点鼻事”,在这里周一到周五每天一篇文章,与技术无关,只哈牛逼。

简单说说NoHTTP的更多相关文章

  1. Nohttp网络请求数据,Post以及Get的简单实用以及设置缓存文字的的请求

    开局声明:这是基于nohttp1.0.4-include-source.jar版本写的教程 由于nohttp功能强悍,因此需要多种权限,仅仅一个联网的权限是不够的,如果只给了Internet的权限,去 ...

  2. Nohttp请求图片的两种简答的方式:普通请求以及缓存请求

    开局声明:这是基于nohttp1.0.4-include-source.jar版本写的教程 由于nohttp功能强悍,因此需要多种权限,仅仅一个联网的权限是不够的,如果只给了Internet的权限,去 ...

  3. Http标准协议Android网络框架——NoHttp

    NoHttp详细文档:http://doc.nohttp.net NoHttp公益测试接口:http://api.nohttp.net 支持与RxJava完美结合.支持一句话切换底层为OkHttp,支 ...

  4. Android如何使用Https与Nohttp框架使用

    什么是Https? HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全 ...

  5. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  6. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  7. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  8. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  9. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

随机推荐

  1. Python3基础 使用clear() 清空一个字典

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  2. Python常见数据结构整理

    Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) 序列中的每个元素都有自己的编 ...

  3. iOS 沙盒

    1. 概念 某个应用程序的非代码文件存放空间. 2. 文件结构 每个沙盒有三个文件夹: Documents: 存放文件 Library: 存放默认设置或状态信息.Library/caches: 缓存文 ...

  4. 【T】并行调度

    /** * 并行调度相关处理 * * 按卫星*日期 ,将待处理的任务分解为 卫星+日期 粒度的子任务 添加到paramMapList列表中 */ List<Map<String, Obje ...

  5. JavaScript定时机制、以及浏览器渲染机制 浅谈

    昨晚,朋友拿了一道题问我: a.onclick = function(){ setTimeout(function() { //do something ... },0); }; JavaScript ...

  6. Chrome 出现adobe flash is out of date的解决方法

    最近使用安装了ubuntu和linux mint,都发现firefox的flash虽然能用,但还是觉得有点小问题,想使用google chrome,但无奈,一安装使用后就发现flash不能用,显示ad ...

  7. Discuz教程:X3.1-x3.2后台admin.php防止直接恶意访问

    功能说明:admin.php是discuz默认的后台地址,正常情况下可以直接访问,为了防止某些恶意访问的情况,可以修改以下内容进行安全性能提升.适用版本:Discuz!x1-x3.2具体实施方案: a ...

  8. 如何将php数组或者对象传递给javascript

    在网上搜了一些方法,最后自己采用的是通过json字串的方式. 假设有一个php 数组 $arr,代码如下: 代码如下: <script> // html5中默认的script是javasc ...

  9. WMWARE下/sbin/scsi_id 返回值为空

    [root@HE1 ~]# /sbin/scsi_id -g -u /dev/sdb 第一种是从VMWARE层面去解决,用文本编辑器修改vmx文件,在vmx文件中任意位置(通常在最后)添加如下行: d ...

  10. MapReduce深度分析(二)

    MapReduce深度分析(二) 五.JobTracker分析 JobTracker是hadoop的重要的后台守护进程之一,主要的功能是管理任务调度.管理TaskTracker.监控作业执行.运行作业 ...