NoHttp详解之NoHttp最原生使用(无封装)
来源:互联网 发布:淘宝客服如何做到秒回 编辑:程序博客网 时间:2024/05/20 18:46
参考博客: 点击打开链接
NoHttp详细文档:http://doc.nohttp.net
NoHttp公益测试接口:http://api.nohttp.net
https://github.com/yanzhenjie/NoHttp
RxJava
完美结合、支持一句话切换底层为OkHttp
,支持缓存数据到数据库或SD卡和数据库,并对数据做了加密保护,支持请求Restful风格的接口,比Retrofit更简单易用。框架特性
- 动态配置底层框架为OkHttp、HttpURLConnection
- 与RxJava完美结合,支持异步请求、支持同步请求
- 多文件上传,支持大文件上传,表单提交数据
- 文件下载、上传下载、上传和下载的进度回调、错误回调
- 支持Json、xml、Map、List的提交
- 完美的Http缓存模式,可指定缓存到数据库、SD卡,缓存数据已安全加密
- 在6.0以上手机缓存到SD卡时需要请求运行时权限:AndPermission
- 自定义Request,直接请求JsonObject、JavaBean等
- Cookie的自动维持,App重启、关开机后还持续维持
- http 301 302 303 304 307重定向,支持多层嵌套重定向
- Https、自签名网站Https的访问、支持双向验证
- 失败重试机制,支持请求优先级
- GET、POST、PUT、PATCH、HEAD、DELETE、OPTIONS、TRACE等请求协议
- 用队列保存请求,平均分配多线程的资源,支持多个请求并发
- 支持取消某个请求、取消指定多个请求、取消所有请求
使用方法
AndroidStudio使用方式
- 如果使用HttpURLConnection作为网络层:
compile 'com.yolanda.nohttp:nohttp:1.1.0'
如果要使用OkHttp作为网络层,请再依赖:compile 'com.yanzhenjie.nohttp:okhttp:1.1.0'
初始化
NoHttp初始化需要一个Context,最好在Application
的onCreate()
中初始化,记得在manifest.xml
中注册Application
。
一般初始化
直接初始化后,一切采用默认设置。
NoHttp.initialize(this);
public class MyApplication extends Application {@Override
public void onCreate() {
super.onCreate();
//NoHttp初始化
NoHttp.initialize(this);
}
}
get和post请求原生使用:
public class MainActivity extends AppCompatActivity { private TextView mTv; /*** * 1.如果是mac,可以安装jsonOnlineView * 2.如果是windows,postman,google的浏览器chrome的插件 */ private String postUrl = "https://api.bmob.cn/1/users"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTv = (TextView) findViewById(R.id.tv); } /*** * Nohttp的get方式 * @param view */ public void btn_get(View view){ /**可以封装到其他的地方*/ String url = "http://www.baidu.com"; //1.创建一个队列 /**也可以封装,只需要一个队列就够了**/ RequestQueue queue = NoHttp.newRequestQueue(); //3.创建消息请求 Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET); //2.利用队列去添加消息请求 /*** * what:请求的标识 * request:请求 * response:请求的回调监听 */ /**请求可以并发,统一处理响应结果**/ queue.add(0, request, new OnResponseListener<String>() { //请求一开始的回调,对话框的加载 @Override public void onStart(int what) { } //成功之后的回调 @Override public void onSucceed(int what, Response<String> response) { //设置响应结果 mTv.setText(response.get()); } //网络请求失败的回调 @Override public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) { } //网络请求完成 @Override public void onFinish(int what) { } }); } public void btn_post(View view){ RequestQueue queue = NoHttp.newRequestQueue(); Request<String> request = NoHttp.createStringRequest(postUrl, RequestMethod.POST); request.addHeader("X-Bmob-REST-API-Key","2bfebfad889df974a01ab7867d411f75"); request.addHeader("X-Bmob-Application-Id","cae7c5400719de3e04d708f5c82d94e8"); request.addHeader("Content-Type","application/json"); request.setDefineRequestBodyForJson("{\"username\" : \"1234567890\",\"password\" : \"654321\"}");// request.add("username","123456");// request.add("password","123456"); queue.add(1, request, new OnResponseListener<String>() { @Override public void onStart(int what) { } @Override public void onSucceed(int what, Response<String> response) { mTv.setText(response.get()); } @Override public void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis) { } @Override public void onFinish(int what) { } }); }}
基本使用:
特别注意:这里的RequestQueue是请求队列,默认3个并发请求,也就是有3个子线程在跑,所以正式项目中不要每发起一个请求就new一个队列,建议在BaseActivity#onCreate(Bundle)
中new一个队列即可,这个activity
的所有请求包括依赖此activity
的fragment
都是用这个队列即可,在BaseActivity#onDestory()
时stop
这个队列即可,当然特殊情况下可以再new一个Queue出来,也无伤大雅的。
建议读者阅读完下方的代码后再把上面这句话读一遍,会理解的更深刻。
BaseActivity,提供基础的封装
public class BaseActivtiy extends Activity implements View.OnClickListener { /** * 请求队列 */ private RequestQueue mRequestQueue; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 创建请求队列, 默认并发3个请求, 传入数字改变并发数量: NoHttp.newRequestQueue(5); mRequestQueue = NoHttp.newRequestQueue(); } @Override protected void onDestroy() { super.onDestroy(); mRequestQueue.cancelAll(); // 退出页面时时取消所有请求。 mRequestQueue.stop(); // 退出时销毁队列,回收资源。 } /** * 发起一个请求。 * * @param what what. * @param request 请求对象。 * @param listener 结果监听。 * @param <T> 要请求到的数据类型。 */ public <T> void request(int what, Request<T> request, OnResponseListener<T> listener) { mRequestQueue.add(what, request, listener); }}
在BaseActivity的子类中使用
public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... } /** * 请求用户信息。 */ private void requestUserInfo() { Request<String> req = NoHttp.createStringRequest(url); request(0, req, new OnResponseListener<String>() { @Override public void onStart(int what) { // 请求开始,可以显示一个dialog。 } @Override public void onSucceed(int what, Response<String> response) { // 请求成功,这里判断服务器的响应码,假如你们服务器200时,才是业务成功: Headers headers = response.getHeaders(); if(headers.getResponseCode() == 200) { String result = response.get(); // 拿到结果。 } } @Override public void onFailed(int what, Response<String> response) { // 请求失败,具体失败类型,请看nohttp主页的demo。 } @Override public void onFinish(int what) { // 请求结束,关闭dialog。 } }); }}
在BaseActivity的子类的Fragment中使用
public class MainFragment extends Fragment { /** * 请求用户信息。 */ private void requestUserInfo() { Request<String> req = NoHttp.createStringRequest(url); ((MainActivity)getActivity()).request(0, req, new OnResponseListener<String>() { @Override public void onStart(int what) { // 请求开始,可以显示一个dialog。 } @Override public void onSucceed(int what, Response<String> response) { // 请求成功,这里判断服务器的响应码,假如你们服务器200时,才是业务成功: Headers headers = response.getHeaders(); if(headers.getResponseCode() == 200) { String result = response.get(); // 拿到结果。 } } @Override public void onFailed(int what, Response<String> response) { // 请求失败,具体失败类型,请看nohttp主页的demo。 } @Override public void onFinish(int what) { // 请求结束,关闭dialog。 } }); }}
下一篇,nohttp的封装版。
如果想学习更多的使用方法,建议参考Demo:https://github.com/yanzhenjie/NoHttp
更多使用介绍请阅读NoHttp文档:doc.nohttp.net
0 0
- NoHttp详解之NoHttp最原生使用(无封装)
- NoHttp详解之NoHttp最基本使用(无封装)
- NoHttp详解之NoHttp最基本使用(无封装)
- Nohttp的使用(二)封装
- NoHttp
- NoHttp
- NoHttp
- android使用NOHTTP配置封装HTTPS
- NoHttp的封装
- NoHttp的封装
- nohttp的封装
- 流行的框架Nohttp到来,让我们见证封装好的Nohttp详细使用步骤吧
- Android NoHttp基础详解
- NoHttp 框架详解
- android之联网Nohttp
- Android如何使用NoHttp
- NoHttp如何使用Https
- NoHttp使用总结
- Latex之WinEdt编辑界面的自动换行
- 皮皮学web不知道第几弹——GenericServlet,HttpServlet
- Android Webview + h5 通用调研
- Android手机 Fildder真机抓包
- Java并发编程的艺术 读后记要(2)
- NoHttp详解之NoHttp最原生使用(无封装)
- EL表达式 自定义方法 进行前后台交互tld
- windows下查看zookeeper节点
- Asp.Net MVC自定义HttpHandler
- 继承 、虚函数 、纯虚函数的区
- ORACLE: 查询(看)表的主键、外键、唯一性约束和索引
- 简易Web服务器实现
- 深入.NET 第六章 上机4
- 安卓BottomSheet实现——类定义