java中使用okhttpsoap,Android okHttp网络请求之Retrofit+Okhttp+RxJava组合

Retrofit介绍:

Retrofit和okHttp师出同门,也是Square的开源库,它是一个类型安全的网络请求库,Retrofit简化了网络请求流程,基于OkHtttp做了封装,解耦的更彻底:比方说通过注解来配置请求参数,通过工厂来生成CallAdapter,Converter,你可以使用不同的请求适配器(CallAdapter), 比方说RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方说json, protobuff, xml, moshi等等。

官网 http://square.github.io/retrofit/

github https://github.com/square/retrofit

Retrofit+OkHttpClient使用:

1.)在build.gradle中添加如下配置

compile 'com.squareup.retrofit2:retrofit:2.1.0'

2.)初始化Retrofit

retrofit = new Retrofit.Builder()

.baseUrl(BASE_URL)

.addConverterFactory(FastJsonConverterFactory.create())

.client(mOkHttpClient)

.build();

3.)初始化OkHttpClient

OkHttpClient.Builder builder = new OkHttpClient().newBuilder()

.connectTimeout(10, TimeUnit.SECONDS)//设置超时时间

.readTimeout(10, TimeUnit.SECONDS)//设置读取超时时间

.writeTimeout(10, TimeUnit.SECONDS);//设置写入超时时间

int cacheSize = 10 * 1024 * 1024; // 10 MiB

Cache cache = new Cache(App.getContext().getCacheDir(), cacheSize);

builder.cache(cache);

builder.addInterceptor(interceptor);

mOkHttpClient = builder.build();

关于okHttp的拦截器、Cache-Control等这里就不再做解说了

4.)关于ConverterFactory

对于okHttpClient的初始化我们都已经很熟悉了,对ConverterFactory初次接触多少有点陌生,其实这个就是用来统一解析ResponseBody返回数据的。

常见的ConverterFactory

Gson: com.squareup.retrofit2:converter-gson

Jackson: com.squareup.retrofit2:converter-jackson

Moshi: com.squareup.retrofit2:converter-moshi

Protobuf: com.squareup.retrofit2:converter-protobuf

Wire: com.squareup.retrofit2:converter-wire

Simple XML: com.squareup.retrofit2:converter-simplexml

Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars

由于项目中使用的是FastJson,所以只能自己自定义ConverterFactory,不过国内已经有大神对此作了封装(http://www.tuicool.com/articles/j6rmyi7)。

FastJson compile 'org.ligboy.retrofit2:converter-fastjson-android:2.0.2'

5.)定义接口 get 请求

1.get请求 不带任何参数

public interface IApi {

@GET("users")//不带参数get请求

Call> getUsers();

}

2.get请求 动态路径 @Path使用

public interface IApi {

@GET("users/{groupId}")//动态路径get请求

Call> getUsers(@Path("userId") String userId);

}

3.get请求 拼接参数 @Query使用

public interface IApi {

@GET("users/{groupId}")

Call> getUsers(@Path("userId") String userId, @Query("age")int age);

}

3.get请求 拼接参数 @QueryMap使用

public interface IApi {

@GET("users/{groupId}")

Call> getUsers(@Path("userId") String userId, @QueryMap HashMap paramsMap);

}

6.)定义接口 post请求

1.post请求 @body使用

public interface IApi {

@POST("add")//直接把对象通过ConverterFactory转化成对应的参数

Call> addUser(@Body User user);

}

2.post请求 @FormUrlEncoded,@Field使用

public interface IApi {

@POST("login")

@FormUrlEncoded//读参数进行urlEncoded

Call login(@Field("userId") String username, @Field("password") String password);

}

3.post请求 @FormUrlEncoded,@FieldMap使用

public interface IApi {

@POST("login")

@FormUrlEncoded//读参数进行urlEncoded

Call login(@FieldMap HashMap paramsMap);

}

4.post请求 @Multipart,@Part使用

public interface IApi {

@Multipart

@POST("login")

Call login(@Part("userId") String userId, @Part("password") String password);

}

7.)Cache-Control缓存控制

public interface IApi {

@Headers("Cache-Control: max-age=640000")

@GET("users")//不带参数get请求

Call> getUsers();

}

8.)请求使用

1.返回IApi

/**

* 初始化Api

*/

private void initIApi() {

iApi = retrofit.create(IApi.class);

}

/**

* 返回Api

*/

public static IApi api() {

return api.iApi;

}

2.发送请求

Call call = Api.api().login(userId,password);

call.enqueue(new Callback() {

@Override

public void onResponse(Call call, Response response) {

Log.e("", "response---->" + response.body());

}

@Override

public void onFailure(Call call, Throwable t) {

Log.e("", "response----失败");

}

});

Retrofit+RxJava使用:

上面介绍了Retrofit 与OkHttp的结合,下面介绍一下Retrofit与RxJava的结合,RxJava作为当前的开源库的网红之一,Retrofit理所当然也提供了对其的支持,RxJava的强大之处强大的异步处理能力,Retrofit与RxJava的结合势必提高开发效率以及运行性能。

1.)在原来的基础上添加以下依赖

compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1' // Retrofit的rx解析库

compile 'io.reactivex:rxandroid:1.2.0'

compile 'io.reactivex:rxjava:1.1.5'

2.)创建retrofit对象实例时,通过addCallAdapterFactory来添加对RxJava的支持

/**

* 初始化Retrofit

*/

private void initRetrofit() {

retrofit = new Retrofit.Builder()

.baseUrl(BASE_URL)

.addConverterFactory(FastJsonConverterFactory.create())

.addCallAdapterFactory(RxJavaCallAdapterFactory.create())

.client(mOkHttpClient)

.build();

}

3.)定义请求接口

public interface IApi {

@POST("system/login")

Observable systemLogin(@Body String userId, @Body String password);

}

4.)调用发送请求

Api.api().systemLogin(userId,password)

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Subscriber() {

@Override

public void onCompleted() {

}

@Override

public void onError(Throwable e) {

}

@Override

public void onNext(String result) {

}

});

总结:

这里简单介绍了Retrofit与Okhttp、RxJava的结合使用。

https://www.cnblogs.com/whoislcj/p/5539239.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的证书透明度验证

因此,我有一个幼稚的想法,即除了证书有效性检查(在Java中)之外,将证书透明性验证作为每个请求的一部分也很容易。 牺牲了整个周末的一半时间,我可以证明这并不是一件小事。 但是, 证书透明性是…

[渝粤教育] 西南科技大学 电子商务原理及应用 在线考试复习资料

电子商务原理及应用——在线考试复习资料 一、单选题 1.( )接受商家的送货要求,将商品送到消费者手中。 A.邮局 B.快递公司 C.送货公司 D.物流中心 2.卓越属于( )类型的B2C电子商务企业: A.经营着离线商店的零售商 B.没有离线商店的虚拟零售企业 C.商品制造商 D.网络交易服务公…

如何判断光纤收发器是否有问题?

一般情况下,光纤收发器或光模块的发光功率如下:多模在10db--18db之间;单模20公里在-8db--15db之间;而单模60公里则在-5db--12db之间。但如是光纤收发器的发光功率出现在-30db--45db之间,那么,很有可能这个光…

[渝粤教育] 西南科技大学 经济数学1 在线考试复习资料

经济数学1——在线考试复习资料 一、单选题 1.求曲线在点处的切线方程( )。 A. B. C. D. 2.求函数的导数( )。 A. B. C. D. 3.设(都是常数),则( )。 A.0 B. C. D. 4.如果函数在区间上的导数( ),那么在区间上是一个常数( )。 A.恒为常数 B.可能为常数 C.恒为零 5.设,则( )。…

matlab 列表 剪切,利用Matlab进行文件批量复制、剪切和修改文件名

文件批量复制、剪切和修改文件名电脑环境文件批量复制文件批量剪切批量修改文件名批量修改文件名和复制(剪切)电脑环境MATLAB:2018aWindows:win10文件批量复制close all;clear all;clc;%目的文件目录DST_PATH_t C:\Users\fatflower\Desktop\2018BBC精听…

[渝粤教育] 西南科技大学 行政法学与行政诉讼法学 在线考试复习资料

行政法学与行政诉讼法学——在线考试复习资料 一、单选题 1.某省工商局与税务局联名对某公司作出处罚,吊销其营业执照,罚款100万元。该公司提起复议,复议机关是( ) A.国家工商总局 B.国家税务总局 C.国务院 D.省政府 2.行政相对人对下列行为不能申请行政复议的是哪一种?( ) A…

activemq 实例_在一台计算机上运行多个ActiveMQ实例

activemq 实例几周前,我再次通过Mule ESB解决方案将Apache ActiveMQ用作JMS提供程序。 由于使用ActiveMQ已经有几年了,所以我认为最好检查一些(新)功能,例如故障转移传输和其他群集功能 。 为了能够测试这些最后的东西…

什么是光纤收发器?光纤收发器作用是什么?

许多朋友一听到光纤收发器这五个大字总会有困惑,比如说什么是光纤收发器,光纤收发器又有什么作用等等疑问。那么,什么是光纤收发器呢?光纤收发器又有什么作用呢?接下来我们就跟随飞畅科技的小编一起来详细了解下吧&…

[渝粤教育] 西南科技大学 质量与可靠性管理 在线考试复习资料

质量与可靠性管理——在线考试复习资料 一、单选题 1.下列关于PDCA的内容说法正确的是( ) A.第一阶段进行申请、提交项目等 B.第二阶段按计划实地去做,去落实具体对策。 C.第三阶段实施标准化,以后就按标准进行,该阶段是实施PDCA的关键。 D.第四阶段对策实施后,把握对策的效果 …

php网站点击按钮更新程序,php页面 点击按钮执行更新操作

代码如下:此页面名称为updateScoreNew.php,点击按钮后获得id和score,然后执行更新数据库操作,不知道怎么写,点击按钮怎么都不调用方法,愁死了都。。。 html head ?php if(isset($_POST[update])) { echo &…

【渝粤教育】电大中专品牌管理与推广_1作业 题库

1.品牌是产品或商品的牌子,而商标是商家和商品的标志,是商品经济发展到一定阶段的产物。该说法() A.正确 B.错误 正确 正确答案:左边查询 学生答案:A 2.企业品牌化,是指品牌的核心不是个别的产品…

在15分钟内使用Spring Boot和Spring Security构建一个Web应用程序

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 开发人员知道保护Web应用程序安全可能会很麻烦。 正确地做是很难的。 最糟糕的是&…

音频光端机的必备要素有哪些?

音频光端机就是发射端把传统的音频模拟信号转换成光信号,通过光纤传输到接收端,在接收端再转换成模拟信号的一种音频设备。那么,音频光端机有哪些必备要素呢?音频光端机的原理是什么呢?接下来我们就一起来详细了解下吧…

php vue联动查询,使用vue.js实现联动效果的示例代码

摘要:本篇文章主要介绍了使用vue.js实现联动效果的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧想用vue.js写一个联动效果,按照自己的思路实验了下,并没有成功。请…

【渝粤教育】电大中专学前儿童语言教育 (4)作业 题库

作业视频教务托管,壹叁路路贰陆陆壹〇肆〇 认为儿童天生就有学习语言能力且体现在一种语言获得装置(LAD)中的教育家是( )。 A.斯金纳 B.乔姆斯基 C.皮亚杰 D.伍顿 错误 正确答案:左边查询 学生答案:未作答 2.下面哪个选…

Spring Setter依赖注入示例

学习如何编写Spring Setter依赖注入示例 。 Setter注入是Spring依赖注入的一种 。 Spring支持字段注入,Setter注入以及构造函数注入,以将依赖项注入Spring托管的bean中。 本教程的范围仅限于Setter注入。 有关Spring依赖注入的更多信息: Sp…

【渝粤教育】电大中专幼儿园课程论 (8)作业 题库

作业视频教务托管,壹叁路路贰陆陆壹〇肆〇 显性课程是 ( )的课程 A.指定的 B.随机的 C.有计划的 D.无计划的 错误 正确答案:左边查询 学生答案:未作答 2.幼儿园课程目标要素不包括( ) A.特征 B.目标 C.评价 D.内容 错误 正确答案:…

http和php怎么交互,实现http与workerman的交互demo

这里主要用到wm的聊天室demo做了一个示例。/*** This file is part of workerman.** Licensed under The MIT License* For full copyright and license information, please see the MIT-LICENSE.txt* Redistributions of files must retain the above copyright notice.** au…

16路开关量光端机产品功能及接线图

飞畅科技生产的16路开关量光端机,可以使开关量信号通过光缆在光纤上传输双向控制。全数字光传输通道,确保高质量的信号传输。面板上有电源指示灯、光信号指示灯数据信号指示灯,可以直观的检测电源、光信号、数据信号状态。单向系列开关量光端…

【渝粤教育】电大中专新媒体营销实务 (2)_1作业 题库

1.新媒体在进行内容传播时,可以做到将文字、图片、视频等同时传播,呈现出()的特点。 A.移动化 B.多元化 C.便捷性 错误 正确答案:左边查询 学生答案:A 2.第四媒体发展到宽带互联网阶段成为(&…