Retrofit2网络框架的使用
对于Retrofit2刚开始用的时候说真的很不习惯,感觉封装OKhttp之后反而更麻烦了,后来用到项目中就感觉这个框架很强大,请求网络变得更灵活了,而且易于维护,还可以和时下比较火热的RxJava进行完美融合,在Retrofit2中是用Gson解析数据的。这里只是简单的说下Retrofit2的使用,对于Retrofit2 + RxJava 本人也是在学习中,各位有好的资源还请分享,共同学习。好了,下面记录下本人在项目中对于Retrofit2的封装使用。
导库
这里我将Retrofit2和Gson的库同时导入,各位可以到GitHub查看最新版本,这里我将版本写到project的gradle中,在需要用的地方引用即可。
ext{gsonVersion = '2.8.1'// retrofit2retrofitVersion ='2.3.0'}
// Gson解析compile "com.google.code.gson:gson:$rootProject.ext.gsonVersion"// Retorfit2compile "com.squareup.retrofit2:retrofit:$rootProject.ext.retrofitVersion"
贴代码
下面将我们需要使用的请求方式写到接口中,这里我就不一一举例了,就写了一些常用的请求。RetrofitService接口代码:
public interface RetrofitService {/*** 请求数据** @param url* @param body* @return*/@POST()Call<ResponseBody> postWithBody(@Url String url, @Body RequestBody body);/*** 单文件上传** @param url* @param type* @param maskey* @param androidID* @param file* @return*/@Multipart@POST()Call<ResponseBody> upload(@Url String url, @Part("type") RequestBody type, @Part("maskey") RequestBody maskey, @Part("androidID") RequestBody androidID, @Part("account") RequestBody account, @Part("isVisible") RequestBody isVisible, @Part("binder") RequestBody binder, @Part MultipartBody.Part file);/*** 多文件上传*下面是我需要的参数,你可以更具需求改变* @param url* @param type* @param maskey* @param androidID* @param parts* @return*/@Multipart@POST()Call<ResponseBody> multUpload(@Url String url, @Part("type") RequestBody type, @Part("maskey") RequestBody maskey, @Part("androidID") RequestBody androidID, @Part("binder") RequestBody binder, @Part() List<MultipartBody.Part> parts);
下面是网络请求的接口
IHttpData:
public interface IHttpData {
void getHttpData(String url, Map parameter, HttpData.OnResponseListener responseListener);void upload(String url, String type, String maskey, String androidID, String binder, String fileUri, HttpData.OnResponseListener responseListener);void multUpload(String url, String type, String maskey, String androidID ,String binder, List<String> filePaths, HttpData.OnResponseListener responseListener);
}
定义好接口之后就要实现我们的接口的方法的,访问网络的请求,及状态返回的处理,HttpData代码如下:
public class HttpData implements IHttpData {private static final String TAG = HttpData.class.getSimpleName();private static Retrofit retrofit;private static RetrofitService retrofitService;OkHttpClient client;public HttpData() {if (retrofit == null) {// 这里是设置网络超时,文件上传或下载可能比较慢
// client = new OkHttpClient.Builder()
// .connectTimeout(1, TimeUnit.DAYS)
// .writeTimeout(1, TimeUnit.DAYS)
// .readTimeout(1, TimeUnit.DAYS)
// .build();retrofit = new Retrofit.Builder().baseUrl(HttpUrl.BASE_HTTP).client(client).build();retrofitService = retrofit.create(RetrofitService.class);}}@Overridepublic void getHttpData(String url, Map parameter, final OnResponseListener responseListener) {//网络请求,获取数据RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), new JSONObject(parameter).toString());//启动请求Call<ResponseBody> call = retrofitService.postWithBody(url, body);call.enqueue(new Callback<ResponseBody>() {@Overridepublic void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {try {String json =response.body().string(); responseListener.responseSuccess(json);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void onFailure(Call<ResponseBody> call, Throwable t) {responseListener.responseFailed();}});}/*** 上传单个文件** @param url* @param type* @param fileUri* @param responseListener*/@Overridepublic void upload(String url, String type, String maskey, String androidID, String binder, String fileUri, final OnResponseListener responseListener) {File file = new File(fileUri);RequestBody typeRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), type);RequestBody maskeyRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), maskey);RequestBody androidIDRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), androidID); RequestBody binderRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), binder);RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);MultipartBody.Part fileBody = MultipartBody.Part.createFormData("media", file.getName(), requestFile);Call<ResponseBody> call = retrofitService.upload(url, typeRequestBody, maskeyRequestBody, androidIDRequestBody, binderRequestBody, fileBody);call.enqueue(new Callback<ResponseBody>() {@Overridepublic void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {try {String json = response.body().string();responseListener.responseSuccess(json);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void onFailure(Call<ResponseBody> call, Throwable t) {responseListener.responseFailed();}});}/*** 多文件上传** @param url* @param type* @param filePaths* @param responseListener*/@Overridepublic void multUpload(String url, String type, String maskey, String androidID, String binder, List<String> filePaths, final OnResponseListener responseListener) {RequestBody typeRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), type);RequestBody maskeyRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), maskey);RequestBody androidIDRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), androidID);RequestBody binderRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), binder);List<MultipartBody.Part> parts = new ArrayList<>(filePaths.size());for (int i = 0; i < filePaths.size(); i++) {File file = new File(filePaths.get(i));RequestBody fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), fileBody);parts.add(part);}Call<ResponseBody> call = retrofitService.multUpload(url, typeRequestBody, maskeyRequestBody, androidIDRequestBody, binderRequestBody, parts);call.enqueue(new Callback<ResponseBody>() {@Overridepublic void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {try {String json = response.body().string();responseListener.responseSuccess(json);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void onFailure(Call<ResponseBody> call, Throwable t) {responseListener.responseFailed();}});//这个接口是为了告诉调用者该网络请求的状态public interface OnResponseListener {void responseSuccess(String json);void responseFailed();}}
这样就将Retrofit2的网络请求都封装好了,这样封装是为了使用方便,易于维护,不用修改每一个有网络请求的地方,只需要修改我们的接口和方法即可,使用就更简单了,直接实例化我们的HttpData 就好了,调用需要的请求。
//实例化网络的请求类HttpData httpData = new HttpData();//map存储我们的访问参数Map map = new HashMap();//url 即我们的接口httpData.getHttpData(url, map, new HttpData.OnResponseListener() {@Overridepublic void responseSuccess(String json) {//这里表示访问成功,处理服务端返回的json,用Gson转换即可}@Overridepublic void responseFailed() {//这里表示访问出错了}});
对于Retrofit2的理解不深,文档写的不好,勿喷,让各位见笑了,希望能帮助到刚学习的人,记录下来也是为了让自己对与Retrofit2的理解更深刻一些,大神们有更好的封装使用方法还请赐教。
Retrofit2网络框架的使用相关推荐
- Android 网络框架 Retrofit2.0介绍、使用和封装
前言 时至今日,Android的网络框架不再像之前那么到处都是,随着Google把 HttpClient直接删掉,似乎意味着Android越来越成熟.网络框架中的佼佼者Volley也不再那么光鲜,取而 ...
- 鸿蒙开发之网络框架搭建,MVP+Retrofit2+okhttp3+Rxjava2+RxHarmony
抓住人生中的一分一秒,胜过虚度中的一月一年! 小做个动图开篇引题 鸿蒙背景 2020年9月10号,鸿蒙2.0(HarmonyOS 2.0)系统正式发布,鸿蒙2.0面向应用开发者发布Beta版本,在20 ...
- 网络框架 - 收藏集 - 掘金
浅谈 Retrofit 封装 - 让框架更加简洁易用 - Android - 掘金 尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiqu..., 本文出自:[ ...
- 云炬Android开发笔记 5-1,2网络框架接口创建
1.网络框架接口创建 1.1 使用的是第三方的框架 [第三方框架]Retrofit,封装一个通用的框架,可以使用RxJava和RxAndroid进行封装,比较难,这里不做讲解: 1.2 restful ...
- android网络框架
https://www.zhihu.com/question/35189851 个人比较推荐Square开源组合,用Retrofit(目前已经是2.0+)+OkHttp基本上已经可以处理任何业务场景了 ...
- 一个整合OkHttp 、Retrofit 、Volley 、RxJava、Novate多种开源网络框架的项目,高度的封装和集成,Android中Web网络请求一行代码解决
一个整合OkHttp .Retrofit .Volley .RxJava.Novate多种开源网络框架的项目,高度的封装和集成,Android中Web网络请求一行代码解决 AndroidHttp 一个 ...
- Android Compose 新闻App(一)网络框架搭建
Compose 新闻App(一)网络框架搭建 前言 正文 一.项目创建 二.依赖配置 三.数据API 四.网络框架构建 五.项目配置 六.网络请求 七.源码 前言 要去学习新的知识,光是简单的使用 ...
- Android常用的网络框架介绍和使用
一.选择开源框架的原则 1.学习的成本:对该框架学习的时间长短,文档是否齐全的考虑 2.流行的程度:该开源框架是否流行,github 上 start 的个数,都是我们考量的标准 3.是否还在维护: ...
- 跨平台微信网络开源Mars与网络框架Okhttp、Volley、Retrofit,Cookie持久化
> 1. Mars 移动端IM网络层跨平台组件库Mars- https://github.com/Tencent/mars Android.iOS.OS X 平台的 demo(微信开源Mars的 ...
最新文章
- Swift开发iOS项目实战视频教程(一)---iOS真简单
- Flowable 数据库表结构 ACT_HI_COMMENT
- 《计算机应用基础》期末试卷.,《计算机应用基础》期末试卷(A卷)《计算机应用基础》期末试卷(A卷).doc...
- KubeSphere配置应用路由
- SAP MM BAPI_PO_CREATE1的用法
- php 获取 年月日时分秒_JS获取年月日时分秒的方法分析
- ADO,ADO.NET,OLEDB,ODBC连接数据库的区别
- Vue的三个点es6知识,扩展运算符表达含义
- 计算机组成原理 唐朔飞 知识点,计算机组成原理知识点总结(唐朔飞版)
- 计算机检索逻辑关系,第二讲 计算机检索基础知识.ppt
- 使用a标签下载文件,解决页面跳转的问题
- CEF浏览器 模拟鼠标点击
- loaders之val-loader
- 常吃几种蔬菜帮你年轻10岁
- 安全杂记二(网络安全威胁)
- pandorabox php,Openwrt Pandorabox 挂载摄像头 定时拍照上传百度网盘,实现实时监控(优酷路由宝)...
- 鸿蒙系统几年不卡,华为手机别乱选,这四款机型基本三年不卡,并且可以升级鸿蒙系统...
- 年薪50万的AI和年薪80万的区块链,哪一个更适合你?
- MySQL酒店管理系统课程设计_酒店管理系统的设计与实现(PHP,MySQL)(含录像)
- 风剑分享 | 只有数据最懂公司的痛点,指导企业决策走向
热门文章
- Android 音视频开发(三) -- Camera2 实现预览、拍照功能
- 红旗linux添加usb无线网卡,红旗6.0 怎么安装无线网卡驱动(急)
- JUST-HLL战队 电控视觉培训 第一周
- 腾讯发布“天眼云镜”主机安全产品
- mysql中vlookup函数_Vlookup + MySql 数据高效迁移
- 面试必备:ArrayMap源码解析
- 首届河南青少年读书成才奖颁发决定
- 神经了的ODE:Neural Ordinary Differential Equations
- Monkey框架(基础知识篇) - monkey事件介绍
- 逻辑回归三部曲——逻辑回归项目实战(信贷数据+Python代码实现)