在Retrofit1中使用的是RestAdapter,而Retrofit2中使用的Retrofit实例,之前的setEndpoint变为了baseUrl。...Retrofit1体验不好的地方: Retrofit1不能同时操作response返回数据(比如说返回的 Header 部分或者 URL)和序列化后的数据(JAVABEAN)。...Retrofit1中同步和异步执行同一个方法需要分别定义接口。 Retrofit1对正在进行的网络任务无法取消。...参考:官方CHANGELOG.md 更新到Retrofit2的一些技巧 1.9使用配置 //gson converter final static Gson gson = new GsonBuilder...:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' compile 'com.squareup.retrofit2
前言 感慨:Retrofit2 虽好,但是,有时候总感觉 Java 这门语言还是美中不足啊!...其实非常有用,TypeAdapterFactory 内部会创建一个 ParamsAdapter,接管了 json 的序列化和反序列化! 来看看我们的 ParamsAdapter 做了什么?...,最后 params 会转换成我们想要的 {"phoneNumber":"159XXXXXXX"} json 格式 ,接下来的事情就交给 Retrofit(像往常一样)。...当然,可能会有人质疑,那 up 你的意思是劳资不用自己费力写 POJO,全用你的 Params 来替代?(如果我回答不是,你会不会一棒子打过来?) 使用场景 这个,我一开始也没提。...遇到这种情况,能创建一个匿名的 params 就创建呗,省下来的时间还能陪陪学妹,何乐而不为! 也有童鞋会说,老板,你把序列化和反序列化全部接管了,如果我没有用你的 Params ,会不会解析异常?
2.1 什么是 TypeAdapter TypeAdapter 是 GSON 2.1 版本开始支持的一个抽象类,用于接管某些类型的序列化和反序列化。...TypeAdapter 最重要的两个方法就是 write() 和 read() ,它们分别接管了序列化和反序列化的具体过程。...如果想单独接管序列化或反序列化的某一个过程,可以使用 JsonSerializer 和 JsonDeserializer 这两个接口,它们组合起来的效果和 TypeAdapter 类似,但是其内部实现是不同的...,最终解析还是使用了标准的 JSONObject 和 JSONArray 类,和 Gson 没有任何关系,Gson 只是起到了一个桥接的作用,好像这个例子也没什么实际用处。...不谈场景说应用都是耍流氓,那么如果是使用 Retrofit 呢?Retrofit 可以配置 Gson 做为数据的转换器,在其内部就完成了反序列化的过程。
GSON 在 JSON 序列化和反序列化之间,利用 @SerializedName 注解来配置多个不同 JSON Key 值,或者再使用 @Expose 来配置一些例外的情况。...2.1 什么是 TypeAdapter TypeAdapter 是 GSON 2.1 版本开始支持的一个抽象类,用于接管某些类型的序列化和反序列化。...TypeAdapter 最重要的两个方法就是 write() 和 read() ,它们分别接管了序列化和反序列化的具体过程。...:"2 } 在这个例子中,最终解析还是使用了标准的 JSONObject 和 JSONArray 类,和 Gson 没有任何关系,Gson 只是起到了一个桥接的作用,好像这个例子也没什么实际用处。...不谈场景说应用都是耍流氓,那么如果是使用 Retrofit 呢?Retrofit 可以配置 Gson 做为数据的转换器,在其内部就完成了反序列化的过程。
Retrofit 早已不是什么新技术了,想必看到这篇博客的大家都早已熟知,这里就不啰嗦了,简单介绍下: Retrofit 是一个针对 Java 和 Android 的设计的 REST 客户机。...它通过基于 REST 的 web 服务检索和上传 JSON (或其他结构化数据)变得相对容易。在使用中,您可以配置用于数据序列化的转换器。...:okio:1.8.0' // Retrofit api 'com.squareup.retrofit2:retrofit:2.7.0' // Gson 服务器数据交互 api 'com.google.code.gson...:gson:2.8.6' 依赖注入很简单, Retrofit 一直是结合 OkHttp 和 Gson(无所谓什么 JSON 解析器都行,这里就用 Gson 了) 我这里专门找了最新的版本库,so~...,但 Retrofit 的好处并不只是这些,还有很多跟深入的只是需要了解,但本文限于篇幅,无法向大家一一介绍 对于我前面的 FIWKeepApp 这个仓库,我将一步步转换到 Retrofit + OkHttp
Spring Cloud Square 项目旨在替代原有的 Spring Cloud Feign , 借助 Retrofit 对底层通信类库的封装实现跨服务调用,目前已在 spring-cloud-incubator...Retrofit 是一个 RESTful 的 HTTP 网络请求框架,它是基于 OkHttp 的。...它是通过注解配置网络参数的,支持多种数据的解析和序列化(Gson、Json、Xml 等,并且对 RxJava 也是支持的。...builder.build().newCall(request).execute(); return response.body().string(); } 进阶使用 作为 Spring Cloud Feign 的替代品...注意看以下代码 和 feign 一样的味道 添加依赖 org.springframework.cloud
如果很多Retrofit的程序员都是用Gson来进行反序列化的,所以他们会在他们的gradle里面添加,如下: dependencies { //省略部分.......所以我们总结一下,就是一个JSON解析的转化器 (二)"com.squareup.retrofit2:converter-gson:2.1.0"的包结构 如下图: ?...内部有两个变量分别是Gson类型的gson和TypeAdapter的adapter,两者是在构造函数里面初始化的。...内部有两个变量分别是Gson类型的gson和TypeAdapter的adapter,两者是在构造函数里面初始化的。...作为反序列化的输入来创建一个成功的Retrofit的响应Response。
' 如果你序列化 采用GSON,同时回调采用RxJava 处理,还应该添加如下内容 compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile...字段名称和值将先进行UTF-8进行编码,再根据RFC-3986进行URI编码。 2、@Multipart:作用于方法 使用该注解,表示请求体是多部分的,每个部分作为一个参数,且用Part注解声明。...具有相同名称的请求头不会相互覆盖,而是照样添加到请求头中 代码如下: @GET("/") Call foo(@Header("Accept-Language") String...lang); 3、@Headers:作用于方法,用于添加一个或多个请求头中 具有相同名称的请求头不会相互覆盖,而是会照样添加到请求头中。...四、为什么要用Retrofit 1、咱们一起来看下Retrofit的优点: 请求的方法参数注解可以定制 支持同步、异步和RxJava 超级解耦(我最爱) 可以配置不同的反序列化工具来解析数据,如json
Retrofit 优点 可以配置不同HTTP client来实现网络请求,如okhttp、httpclient等 请求的方法参数注解都可以定制 支持同步、异步和RxJava 超级解耦 可以配置不同的反序列化工具来解析数据...缺点 不能接触序列化实体和响应数据 执行的机制太严格 使用转换器比较低效 只能支持简单自定义参数类型 使用的设计模式 Builder模式 Retrofit在生成Retrofit对象和ServiceMethod...工厂模式 Retrofit的Converter和Adapter都是由抽象工厂模式来生成的。...和Adapter都是在Retrofit代理各个方法时候生成的。...总结 Retrofit的设计符合了高内聚,低耦合的原则,有效的将其他框架组织起来,并使其之间解耦,这增强了Retrofit的易用性和灵活性。
下面就简单讲一下目前比较流行的两个框架 Retrofit 2 和 Realm,来完成数据的获取和保存。...Retrofit 2 Retrofit 的厉害之处我就不多说了,网上的教程很多的,我只讲最最简单的用法。...配置 在 Module 的 build.grade 里添加依赖: compile "com.squareup.retrofit2:retrofit:${RETROFIT_VERSION}" compile..."com.squareup.retrofit2:converter-scalars:${RETROFIT_VERSION}" compile "com.squareup.retrofit2:converter-gson...Realm Realm 是 SQLite 的替代者,它更快速、更易用。下面看看 Realm 的简单使用。
compile 'com.squareup.retrofit2:retrofit:2.1.0' ★★ xUtils3 compile 'org.xutils:xutils:3.3.38' ★★ JSON...解析 名称 引用方式 个人推荐 fastjson compile 'com.alibaba:fastjson:1.2.46' ★★★ gson compile 'com.google.code.gson...:gson:2.8.0' ★★泛型支持不好 事件总线 名称 引用方式 个人推荐 EventBus compile 'org.greenrobot:eventbus:3.0.0' ★★★项目未使用Rxjava...' implementation 'io.reactivex.rxjava2:rxjava:2.1.10' 权限 名称 引用方式 个人推荐 PermissionsDispatcher 见官网 ★★★...UI相关 我常用的UI组件 作用 名称 引用方式 圆状进度 CircleProgressBar implementation 'com.dinuscxj:circleprogressbar:1.1.1'
不过用MQ又要部署太多的事情,为几个简单去部署一堆事情,俺乐意其时间也不乐意,好吧!那用回http(s),虽然安卓的http传输还是可以,不过刚接触到一套Retrofit2框架。...它就是是一直雄霸在开源框架的TOP 1 的 Retrofit Retrofit的前世今生 Retrofit其实是一款基于OkHttp的框架,它的底层就是OkHttp,OkHttp这个老朋友就不多解释了...Retrofit的优点 ①超级解耦 ②可以配置不同HttpClient来实现网络请求 ③支持同步、异步和RxJava ④可以配置不同的反序列化工具来解析数据,如:json、xml...:retrofit:2.5.0'//Retrofit依赖 implementation 'com.squareup.retrofit2:converter-gson:2.5.0'//可选依赖...,需要填加这个注解,用来将提交的参数编码 //post请求不提交参数,不要加, //如果有提交的参数,没有加@FormUrlEncoded //@Field和@FieldMap一样
参数支持String、int等基本类型,复杂数据需用序列化 案例二:列表数据动态渲染(含下拉刷新) 痛点:官方文档只讲基础ListContainer,但实际开发必加下拉刷新! // 1....详见官方Sample中的TodoList案例 性能优化: 复用Item组件避免内存抖动 分页加载时在onScrollEnd事件追加数据 案例三:网络请求封装(Retrofit风格) 为什么要封装:官方...HttpTask写回调太反人类!...@Override public void onSuccess(String data) { // 更新UI } }); 高阶技巧: 搭配Gson...解析JSON数据 使用EventHandler解决子线程更新UI问题 ️ 案例四:数据持久化(轻量级存储) 替代SharedPreferences:鸿蒙的Preferences更香!
大家都明白第三方接口的参数和返回值都是提供方定义好的,我们封装时需要生成自己的POJO类。这种工作没有技术含量不说,还耗时耗力。..."wait_days_after_receive":7, "available_week": { "week_day": [ 1, 2...严重降低了写代码的乐趣,胖哥在手写了几个后都有放弃的冲动了。 2. JSON 转 POJO 工具 我需要搞一个 JSON 转 POJO 工具来干这个活。...同时它还支持 GSON, FastJSON, AutoValue (GSON), Logan Square, Jackson 这些 JSON 框架,方便你序列化和反序列化。 ? 演示 ?...真正能提高水平的是对逻辑过程、逻辑对象的归纳和抽象,如何让逻辑层次化,清晰而有序。好了今天的分享就到这里,我是:码农小胖哥,多多关注,分享更多编程干货。
年 东汉Java年,Java的系列化工具成三足鼎立之势,分别是曹魏Jackson,蜀汉Gson,和东吴FastJson 曹魏Jackson Jackson被称为“ Java JSON库”或“ Java的最佳...Gson: 吾观取汉上之地,易如反掌。我主刘豫州躬行仁义,不忍夺同宗之基业,故力辞之。刘琮孺子,听信佞言,暗自投降,致使曹操得以猖獗。...例如,ExtendableBean实体具有name属性和一组键/值对形式的可扩展属性: image.png 当我们序列化这个实体的一个实例时,我们将Map中的所有键值作为标准的、普通的属性: image.png...让我们为MyBean实体的属性设置自定义顺序: 这是序列化的输出: image.png @JsonRootName 该 @JsonRootName注释时,如果包裹被启用,以指定的包装中使用的根目录的名称...@JsonAlias 所述 @JsonAlias定义反序列化过程为属性的一个或多个的替代名称。
大家好,又见面了,我是你们的朋友全栈君。 Android 代码混淆 简介 在我们日常开发中,对已经开发完成的源代码,需做一些代码混淆工作,以对代码起到一种保护和降低安装包体积的作用。...-keepclassmembersname 防止成员被重命名 -keepclasseswithmembers 防止拥有该成员的类和成员被移除或者被重命名 -keepclasseswithmembernames...防止拥有该成员的类和成员被重命名 类通配符 * 匹配任意长度字符,但不含包名分隔符(.)...android.os.Parcelable { public static final android.os.Parcelable$Creator *; } # 保留Serializable序列化的类不被混淆...# Retrofit -dontwarn retrofit2.** -keep class retrofit2.** { *; } -keepattributes Signature -keepattributes
注1:{占位符}和PATH尽量只用在URL的path部分,url中的参数使用Query和QueryMap 代替,保证接口定义的简洁 注2:Query、Field和Part这三者都支持数组和实现了Iterable...时需要明确告知用于将ResponseBody转换我们泛型中的类型时需要使用的Converter 引入Gson支持: compile 'com.squareup.retrofit2:converter-gson...:2.0.2' 通过GsonConverterFactory为Retrofit添加Gson支持: Gson gson = new GsonBuilder() //配置你的Gson...测试1', content='这里是 Retrofit2 Demo 测试服务器1'},.....], count=20, page=1} 「20160608补充」:像上面的这种情况最后我们无法获取到返回的...Header和响应码的,如果我们需要这两者,提供两种方案: 1、用Observable``Observable ,这里的Response指retrofit2.Response 2、用
现如今,做 Android 开发在选择网络框架时,大多数都会首推 Retrofit 。Retrofit 以其简洁优雅的代码俘获了大多数开发者的心。...然而 Retrofit 内部请求也是基于 OKHttp 的,所以在做一些自定义修改 HTTP 请求时,需要对 OKHttp 拦截器具有一定了解。...经过了这两种拦截器,相信同学们已经充分体会到了 OKHttp 的优点和与众不同。 最后,自定义拦截器的使用情景通常是对所有网络请求作统一处理。...还是后台需求,login 接口返回的数据也是经过 AES 加密的。所以需要我们针对所有响应体都做解密处理。 另外,还有很重要的一点,就是数据正常和异常时返回的 JSON 格式不一致。...我们先创建包名 retrofit2.converter.gson ,为什么要创建这个包名呢?
示例中,演示在序列化和反序列化过程中更改json和java对象之间的字段名称。...9.1、@SerializedName 默认情况下,我们假设Java模型类和JSON将具有完全相同的字段名称。 但有时情况并非如此,某些名称有所不同。...请记住,它无法阻止单向转换。它同时阻止了两者。 transient 具有与@Expose相同的效果(serialize = false,deserialize = false)。...JsonElement f3 = f2Obj.get("f3"); } } 七、自定义序列化和反序列化 Gson在默认序列化和反序列化方面提供了非常出色的功能。...不过,我们可能会遇到默认和内置自定义选项无法解决我们问题的情况。在这种情况下,我们可以通过两个接口JsonSerializer和JsonDeserializer使用自定义序列化和反序列化。
JSON 序列化和反序列化入门 Java-JSON 序列化基础 先来看一些序列化例子,Gson 中的序列化意味着将 Java 对象映射成 JSON 数据格式,在接下来的教程中,我们会逐步介绍一些更复杂的情况...@SerializedName 匹配多个反序列化名称 我们将介绍如何将多个字段名称映射到一个字段属性上。...,所以,如果你使用 Gson 将 Java model 类生称 JSON 串,结果就是 value 的名称就是字段的名称。..., isDeveloper=true, age=18, day2=MONDAY) 通过结果可以看到枚举的(反)序列化使用,并配合 @SerializedName 来简化使用。...Gson 来自定义(反)序列化和自定义实例创建。