对于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网络框架的使用相关推荐

  1. Android 网络框架 Retrofit2.0介绍、使用和封装

    前言 时至今日,Android的网络框架不再像之前那么到处都是,随着Google把 HttpClient直接删掉,似乎意味着Android越来越成熟.网络框架中的佼佼者Volley也不再那么光鲜,取而 ...

  2. 鸿蒙开发之网络框架搭建,MVP+Retrofit2+okhttp3+Rxjava2+RxHarmony

    抓住人生中的一分一秒,胜过虚度中的一月一年! 小做个动图开篇引题 鸿蒙背景 2020年9月10号,鸿蒙2.0(HarmonyOS 2.0)系统正式发布,鸿蒙2.0面向应用开发者发布Beta版本,在20 ...

  3. 网络框架 - 收藏集 - 掘金

    浅谈 Retrofit 封装 - 让框架更加简洁易用 - Android - 掘金 尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiqu..., 本文出自:[ ...

  4. 云炬Android开发笔记 5-1,2网络框架接口创建

    1.网络框架接口创建 1.1 使用的是第三方的框架 [第三方框架]Retrofit,封装一个通用的框架,可以使用RxJava和RxAndroid进行封装,比较难,这里不做讲解: 1.2 restful ...

  5. android网络框架

    https://www.zhihu.com/question/35189851 个人比较推荐Square开源组合,用Retrofit(目前已经是2.0+)+OkHttp基本上已经可以处理任何业务场景了 ...

  6. 一个整合OkHttp 、Retrofit 、Volley 、RxJava、Novate多种开源网络框架的项目,高度的封装和集成,Android中Web网络请求一行代码解决

    一个整合OkHttp .Retrofit .Volley .RxJava.Novate多种开源网络框架的项目,高度的封装和集成,Android中Web网络请求一行代码解决 AndroidHttp 一个 ...

  7. Android Compose 新闻App(一)网络框架搭建

    Compose 新闻App(一)网络框架搭建 前言 正文 一.项目创建 二.依赖配置 三.数据API 四.网络框架构建 五.项目配置 六.网络请求 七.源码 前言   要去学习新的知识,光是简单的使用 ...

  8. Android常用的网络框架介绍和使用

    一.选择开源框架的原则 1.学习的成本:对该框架学习的时间长短,文档是否齐全的考虑  2.流行的程度:该开源框架是否流行,github 上 start 的个数,都是我们考量的标准  3.是否还在维护: ...

  9. 跨平台微信网络开源Mars与网络框架Okhttp、Volley、Retrofit,Cookie持久化

    > 1. Mars 移动端IM网络层跨平台组件库Mars- https://github.com/Tencent/mars Android.iOS.OS X 平台的 demo(微信开源Mars的 ...

最新文章

  1. Swift开发iOS项目实战视频教程(一)---iOS真简单
  2. Flowable 数据库表结构 ACT_HI_COMMENT
  3. 《计算机应用基础》期末试卷.,《计算机应用基础》期末试卷(A卷)《计算机应用基础》期末试卷(A卷).doc...
  4. KubeSphere配置应用路由
  5. SAP MM BAPI_PO_CREATE1的用法
  6. php 获取 年月日时分秒_JS获取年月日时分秒的方法分析
  7. ADO,ADO.NET,OLEDB,ODBC连接数据库的区别
  8. Vue的三个点es6知识,扩展运算符表达含义
  9. 计算机组成原理 唐朔飞 知识点,计算机组成原理知识点总结(唐朔飞版)
  10. 计算机检索逻辑关系,第二讲 计算机检索基础知识.ppt
  11. 使用a标签下载文件,解决页面跳转的问题
  12. CEF浏览器 模拟鼠标点击
  13. loaders之val-loader
  14. 常吃几种蔬菜帮你年轻10岁
  15. 安全杂记二(网络安全威胁)
  16. pandorabox php,Openwrt Pandorabox 挂载摄像头 定时拍照上传百度网盘,实现实时监控(优酷路由宝)...
  17. 鸿蒙系统几年不卡,华为手机别乱选,这四款机型基本三年不卡,并且可以升级鸿蒙系统...
  18. 年薪50万的AI和年薪80万的区块链,哪一个更适合你?
  19. MySQL酒店管理系统课程设计_酒店管理系统的设计与实现(PHP,MySQL)(含录像)
  20. 风剑分享 | 只有数据最懂公司的痛点,指导企业决策走向

热门文章

  1. Android 音视频开发(三) -- Camera2 实现预览、拍照功能
  2. 红旗linux添加usb无线网卡,红旗6.0 怎么安装无线网卡驱动(急)
  3. JUST-HLL战队 电控视觉培训 第一周
  4. 腾讯发布“天眼云镜”主机安全产品
  5. mysql中vlookup函数_Vlookup + MySql 数据高效迁移
  6. 面试必备:ArrayMap源码解析
  7. 首届河南青少年读书成才奖颁发决定
  8. 神经了的ODE:Neural Ordinary Differential Equations
  9. Monkey框架(基础知识篇) - monkey事件介绍
  10. 逻辑回归三部曲——逻辑回归项目实战(信贷数据+Python代码实现)