volley+okhttp封装,一行代码就可访问网络

前言:

我写这个可能不会完全的教会你去怎么封装一个网络框架,我的目的在于让你不需要你自己封装就可以访问网络,或者说互相学习也可以,我只是想让你大概的了解下我的思路,最主要的就是教你如何使用它,并且将它应用在自己的项目中。因为现在的volley很火,而且okhttp也很火,这二者结合非常适合网络请求,具体有什么好处,大家可以自行百度,这里就不啰嗦了。

简介

支持post,get请求,上传单个文件,上传多个文件,表单提交

如何一行代码就可以访问网络

1,访问网络带参数post请求

   String url = "http://dev.bodyplus.cc:8088/api/users?do=smsCode";
//参数
Map<String, String> params = new HashMap<>();
params.put("smsType", "1");
params.put("smsPhone", "18219200511");
params.put("type", "2");
//最主要的就是这一行
NetworkUtils.getInstance().sendPostRequest(url, params, new RequestCallback() {
@Override
public void onSuccess(Object object) { Log.d("1008611", object.toString());
data.setText(object.toString());
} @Override
public void onFail(String string) {
Log.d("1008611", string);
data.setText(string);
}

这需要调用上面这个方法就可以访问网络了,是不是很简单

2,上传一个带参数的文件

        //上传地址
String url = ""; //参数
Map<String, String> params = new HashMap<>(); params.put("key", "value"); String path = "";
//需要上传的文件
File file = new File(path); NetworkUtils.getInstance().uploadFile(url, params, "file", file, new RequestCallback() {
@Override
public void onSuccess(Object object) { } @Override
public void onFail(String string) {
}
});

封装大致思路

从上面的方法可以看出,入口是NetworkUtils这个类,这个类里的方法

        /**
* 支持post 带参数的请求
*
* @param url 访问的地址
* @param params 访问需要加的参数
* @param callback 访问的回调
*/
public void sendPostRequest(String url, Map<String, String> params, final RequestCallback callback) {
if (UiUtils.hasNetwork()) {
CustomRequest customRequest = new RequestBuilder().url(url).params(params).post().succesListener(new Response.Listener() {
@Override
public void onResponse(Object response) {
try {
JSONObject jsonObject = new JSONObject(response.toString()); String msg = getMsg(jsonObject); if (validationStatusCode(jsonObject)) {
callback.onSuccess(response);
} else {
callback.onFail(msg);
}
} catch (JSONException e) {
e.printStackTrace();
callback.onFail("服务器异常");
} }
}).errorListener(new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) { if (!TextUtils.isEmpty(error.getMessage())) {
callback.onFail(error.getMessage());
} else {
callback.onFail("服务器异常");
}
}
}).build();
HttpClientRequest.getInstance().addRequest(customRequest);
} else {
callback.onFail("网络掉线了!");
}
}

HttpClientRequest.getInstance().addRequest(customRequest);这行代码执行后就可以访问网络了,是的,里面的参数是一个request,这个request是自定义的,CustomRequest类里可以添加http的头,在这里可以添加cookie,或者存储cookie,具体可以下载Demo查看,还有一个类就是HttpClientRequest,这个类的方法:

  public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(UiUtils.getContext(), new OkHttpStack());
}
return mRequestQueue;
}

当然不是这一个方法,还有其他的方法,在这个方法里使用了OkHttpStack, 
因为最终我要使用的是OkHttpClient,所以在这个类里,使用了OkHttpClient,可以在Demo查看。

如何使用

至于实现的思路,可能这样不会讲的很清楚,但是咱们都是看代码都能懂得人就不用讲的太多了,最主要的还是如何使用啦

很简单,按照我说的做,你就可以使用啦,

netutils的包下就是这个访问网络的所有类,所以直接复制到你的项目里

还有一个就是libs下有两个jar包,也复制到你的项目里

另外一个就是gradle文件

dependencies {
compile 'eu.the4thfloor.volley:com.android.volley:2015.05.28'
compile 'com.squareup.okhttp3:okhttp:3.4.0-RC1'
compile 'com.google.code.gson:gson:2.7'
compile files('libs/org.apache.http.legacy.jar')
compile files('libs/httpmime-4.2.5.jar')
}

做完了这些,就算移植成功了

最后的话

不能光会使用,还得了解下他的原理,不在这介绍原理了就,网上有很多人讲的都很明白,也可以看看源码,这个封装就是仿照源码完成的。

Demo地址: https://github.com/FussenYu/HttpDemo

点击下载Demo

volley+okhttp封装,一行代码就可访问网络的更多相关文章

  1. 一行代码实现Okhttp,Retrofit,Glide下载上传进度监听

    https://mp.weixin.qq.com/s/bopDUFMB7EiK-MhLc3KDXQ essyan 鸿洋 2017-06-29 本文作者 本文由jessyan投稿. jessyan的博客 ...

  2. gePlugin封装成winform控件,一行代码即可加载。

    将插件直接封装为控件,大大简化了GEPlugin的使用.多数常用功能也已经封装完毕,其他功能全部开放接口,直接调用即可. 1. GepluginControl控件传送门: 链接:https://pan ...

  3. Winform开发框架之权限管理系统改进的经验总结(4)-一行代码实现表操作日志记录

    在前面介绍了几篇关于我的权限系统改进的一些经验总结,本篇继续这一系列主体,介绍如何一行代码实现重要表的操作日志记录.我们知道,在很多业务系统里面,数据是很敏感的,特别对于一些增加.修改.删除等关键的操 ...

  4. C# 求精简用一行代码完成的多项判断 重复赋值

    C# 求精简用一行代码完成的多项判断 重复赋值 哈哈,说实话,个人看着这么长的三元操作也麻烦,但是我也只想到了这样三元判断句中执行方法体能够写到一行,追求的终极目的是,用一行实现这个过程,而且简单,由 ...

  5. Android Studio发布项目到jcenter,一行代码引入Module

    前面我们使用自己封装的okhttp项目时候,只需要app/build.gradle文件中加一行代码就能使用项目. compile 'com.ansen.http:okhttpencapsulation ...

  6. okhttputils【 Android 一个改善的okHttp封装库】使用(一)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文使用的OKHttp封装库是张鸿洋(鸿神)写的,因为在项目中一直使用这个库,所以对于一些常用的请求方式都验证过,所以特此整理下. ...

  7. 超简单的okhttp封装工具类(上)

      版权声明:转载请注明出处:http://blog.csdn.net/piaomiao8179 https://blog.csdn.net/piaomiao8179/article/details/ ...

  8. OkHttp封装之后使用

    代码都封装好了,上层Activity如何调用呢? 1.依赖 如果是android studio开发支持在线依赖(我已经把项目添加到jcenter上): compile 'com.ansen.http: ...

  9. 每一行代码都有记录—如何用git一步步探索项目的历史

    每一行代码都有一块被隐藏了的文档信息. 下面的代码片段不管是谁写的,其第4行因为某些原因要访问一个DOM结点的clientLeft属性,但却对结果不作任何处理.这十分的莫名其妙,你能告诉我他们为什么要 ...

随机推荐

  1. unity组件路径自动生成

    unity 有时候找路径太麻烦 写了一个自动生成脚本的工具 using System.Collections.Generic; using System.IO; using System.Text; ...

  2. Debian setup the time

    sudo gedit /etc/default/hwclock将 井HWCLOCKACCESS=yes 和 井HCTOSYS_DEVICE=rtc0 前的 井 符号去掉,再改 rtc0 为 rtc1 ...

  3. 【JavaScript】DOM和BOM之我的理解

    2018年12月17日 一.我们能够对html文档和浏览器做的操作 (一)html文档 增.删.改.可以在html中增加.删除.改动元素 (二)浏览器 地址栏:输入.修改地址 历史记录:前进.后退.跳 ...

  4. 单点登录(SSO)详解

    背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便.但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多次 ...

  5. ACM-ICPC 2018 南京赛区网络预赛(A, J)

    A  签到题 Alice, a student of grade 666, is thinking about an Olympian Math problem, but she feels so d ...

  6. 如何查看视图的sql语句

    select text from syscomments s1 join sysobjects s2 on s1.id=s2.id where name='视图名称'前提条件是视图没有被加密,有权限

  7. 2018-2019-3 网络对抗技术 20165305 Exp3 免杀原理与实践

    1.实验内容及步骤 1.1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shellcode编程 将做实验二时生成的后门文件用virusto ...

  8. svn基础了解

    Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统 Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的 ...

  9. Linux基础命令---ipcs显示进程通信

    ipcs ipcs指令用来显示进程间通信状况.“-i”选项允许指定特定的资源id.将只打印有关此id的信息. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.SUS ...

  10. Win10环境下 HTTP 错误 500.19 - Internal Server Error 问题及其解决方法

    记一下今日份小bug... 明天要做软件架构实验了,今天打算测试下运行web项目,于是乎,找出了以前用JSP写的web项目测试运行不了,我再打开浏览器测试Tomcat服务器,在地址栏键入http:// ...